• json前后台传值


       谈到JSON,简单的说就是一种数据交换格式。近年来,其在服务器之间交换数据的应用越来越广,相比XML其格式更简单、编解码更容易、扩展性更好,所以深受开发人员的喜爱。

       下面简单的写一下在项目中前后台json传值的一个小例子,供大家参考、查阅。

    一:前台传后台

    1.前台jsp页面代码:

         在index中将实体对象(自己创建即可)插入list中,再将list集合转化成json数组,利用post方式发送AJAX请求,将这个json数组发送至后台(servlet),再在后台进行解析即可。

    index.jsp

    <%@ page language="java" import="java.util.Date,com.badminton.utils.JsonDateValueProcessor,java.text.SimpleDateFormat,java.util.List,net.sf.json.JSONArray,net.sf.json.JSONObject,net.sf.json.JsonConfig,java.util.ArrayList,com.badminton.entity.Athlete,net.sf.json.JSONObject" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>My first json page</title>
    <%
      SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
      Athlete athlete1 = new Athlete();
      athlete1.setAthlete_id(1003);
      athlete1.setAthlete_name("林丹");
      athlete1.setAthlete_sex("");
      Date athlete_age1 = format1.parse("1983-10-14");//是java.util.date
      athlete1.setAthlete_age(athlete_age1);
      athlete1.setCoach_id(101);
      athlete1.setEvent_id(1);
      athlete1.setService_status("1");
      athlete1.setExperience("2013年第12届全运会男单冠军。");
      Athlete athlete2 = new Athlete();//记录2
      athlete2.setAthlete_id(1004);
      athlete2.setAthlete_name("鲍春来");
      athlete2.setAthlete_sex("");
      Date athlete_age2 = format1.parse("1988-10-14");
      athlete2.setAthlete_age(athlete_age2);
      athlete2.setCoach_id(101);
      athlete2.setEvent_id(1);
      athlete2.setService_status("1");
      athlete2.setExperience("2011年亚洲羽毛球锦标赛亚军。");
                                                                                  
      List<Athlete> list1 = new ArrayList<Athlete>();
      list1.add(athlete1);
      list1.add(athlete2); 
      JsonConfig jsonConfig = new JsonConfig();//解决date类型的传输问题
      jsonConfig.registerJsonValueProcessor(Date.class , new JsonDateValueProcessor());
      JSONArray jsonarray = JSONArray.fromObject(list1, jsonConfig);
    %>
    <script type="text/javascript" src="js/json2.js"></script>
    <script type="text/javascript">
      var xmlHttp;
      function createXmlHttpRequest() {
        if (window.ActiveXObject) {
          xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } else if (window.XMLHttpRequest) {
          xmlHttp = new XMLHttpRequest();
        }
      }
      //回调
      function handleStateChange() {
        if (xmlHttp.readyState == 4) {
          if (xmlHttp.status == 200) {
            parseResults();
          }
        }
      }
      //将后台返回的数据显示在层serverResponse中
      function parseResults() {
        var result=xmlHttp.responseXML.getElementsByTagName("result")[0].firstChild.data;
        alert(result);
      }
      function doJSON() {
        var athletehead={athlete_id:1,tablename:"athlete"};
        var myobj=eval(athletehead); 
        var str1=JSON.stringify(myobj);//str1以后可用来识别数据库中的表
        var str2='<%=jsonarray%>';
        var url = "http://localhost:8080/com.badminton.servlet/JsonServer";
        createXmlHttpRequest();
        xmlHttp.open("POST", url, true);
        xmlHttp.onreadystatechange = handleStateChange;//回调
        xmlHttp.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded;text/xml;charset=utf-8"); //text/xml;charset=utf-8:解决汉字封装json问题
        xmlHttp.send("athletehead="+str1+"&athlete="+str2);//传送了两个对象
      }
    </script>
    </head>
    <body>
    <form id="form1">
    <table>
     <tr>
       <td align="center"><input type="button" name="submit" value="提交" onClick="doJSON()"></td>
     </tr>
    </table>
    </form>
    </body>
    </html>

       后台接受前台传来的json对象,解析插入数据库中,且反给前台一个是否成功的消息。具体插入数据库的代码自己编写一个即可。

    JsonServer.java

    package com.badminton.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Date;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.badminton.app.AthleteAction;
    import net.sf.json.JSONObject;
    import net.sf.json.JSONArray;
    public class JsonServer extends HttpServlet {
      public JsonServer() {
        super();
      }
      public void destroy() {
        super.destroy();
      }
      public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        this.doPost(request, response);
      }
      public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
                                                                                        
        response.setContentType("text/xml");
        response.setHeader("Cache-Control", "no-cache");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        AthleteAction athleteaction=new AthleteAction();
        try {
          String json1 = request.getParameter("athletehead");//接收athlete表的头数据
          String json2 = request.getParameter("athlete");//接收athlete表数据
          json1 = java.net.URLDecoder.decode(json1,"UTF-8");
          json2 = java.net.URLDecoder.decode(json2, "UTF-8");
          if ((json1 != "") && (json2 != "")) {
            //System.out.println("json1:"+json1);
            JSONObject jsonObject1 =JSONObject.fromObject(json1);//生成json对象
            JSONArray jsonArray2 = JSONArray.fromObject(json2);//生成JSON数组
            for(int i=0;i<jsonArray2.size();i++){
              JSONObject resultObj = jsonArray2.optJSONObject(i);//根据JSONArray生成JSONObject
              int athlete_id=resultObj.getInt("athlete_id");
              String athlete_name=resultObj.getString("athlete_name");
              String athlete_sex=resultObj.getString("athlete_sex");
              String age=resultObj.getString("athlete_age");
              Date athlete_age = Date.valueOf(age);//转换成java.sql.Date
              //System.out.println(athlete_age);
              int coach_id=resultObj.getInt("coach_id");
              int event_id=resultObj.getInt("event_id");
              System.out.println(athlete_name);
              String service_status=resultObj.getString("service_status");
              String experience=resultObj.getString("experience");
              athleteaction.athleteAdd(athlete_id,athlete_name,athlete_sex,athlete_age,coach_id,event_id,service_status,experience);//对数据库进行操作,具体代码未附
            }
            String result = "数据上传成功!";
            out.println("<response>");
            out.println("<result>" + result + "</result>");
            out.println("</response>");
            out.close();
          } else{
                                                                                            
            String result = "传输过程出错,请重传!";
            out.println("<response>");
            out.println("<result>" + result + "</result>");
            out.println("</response>");
            out.close();
          }
        } catch (Exception e) {
          System.out
              .println("JsonServer doPost(HttpServletRequest request, HttpServletResponse response) 报错:"
                  + e.getMessage());
        }
      }
      public void init() throws ServletException {
      }
                                                                                      
                                                                                      
    }

    3.解决传递日期的一个工具类

         若没有这个工具类,date型数据会被转化成json数组的格式,后台解析起来会很复杂。

    JsonDateValueProcessor.java

    package com.badminton.utils;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    import net.sf.json.JsonConfig;
    import net.sf.json.processors.JsonValueProcessor;
    public class JsonDateValueProcessor implements JsonValueProcessor{
         /**
         * datePattern
         */
        private String datePattern = "yyyy-MM-dd";
        /**
         * JsonDateValueProcessor
         */
        public JsonDateValueProcessor() {
            super();
        }
        /**
         * @param format
         */
        public JsonDateValueProcessor(String format) {
            super();
            this.datePattern = format;
        }
        /**
         * @param value
         * @param jsonConfig
         * @return Object
         */
        public Object processArrayValue(Object value, JsonConfig jsonConfig) {
            return process(value);
        }
        /**
         * @param key
         * @param value
         * @param jsonConfig
         * @return Object
         */
        public Object processObjectValue(String key, Object value,
                JsonConfig jsonConfig) {
            return process(value);
        }
        /**
         * process
         * @param value
         * @return
         */
        private Object process(Object value) {
            try {
                if (value instanceof Date) {
                    SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
                            Locale.UK);
                    return sdf.format((Date) value);
                }
                return value == null ? "" : value.toString();
            } catch (Exception e) {
                return "";
            }
        }
        /**
         * @return the datePattern
         */
        public String getDatePattern() {
            return datePattern;
        }
        /**
         * @param pDatePattern the datePattern to set
         */
        public void setDatePattern(String pDatePattern) {
            datePattern = pDatePattern;
        }
    }

    二:后台传前台

       后台以list和map两种形式封装json,前台注意json数组和json对象解析时的差别即可。

    1.TestJson.java

    package com.badminton.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.List;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    public class TestJson extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
               doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {
      response.setContentType("text/html");
      String str= request.getParameter("name");//得到ajax传递过来的paramater
      System.out.println(str);
      PrintWriter out = response.getWriter();
      List list = new ArrayList();//传递List
              //Map m=new HashMap();//传递Map  
      User u1=new User();
      u1.setUsername("zah");
      u1.setPassword("123");
      User u2=new User(); 
      u2.setUsername("ztf");
      u2.setPassword("456");
            list.add(u1); //添加User对象    
            list.add(u2); //添加User对象
              //m.put("u1", u1);
              //m.put("u2", u2); 
            JSONArray jsonArray2 = JSONArray.fromObject( list );//转化成json对象
              //JSONObject jo=JSONObject.fromObject(m);//转化Map对象
            out.print(jsonArray2);//返给ajax请求
            System.out.println(jsonArray2);
              //out.print(jo);//返给ajax请求
    }
    }

    2.showjson.jsp

        利用Jquery、AJAX异步传输的方式接受后台的发送请求。

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript">
        function test(){
          $.ajax({
            type:"POST", //请求方式
            url:"servlet/TestJson",//请求路径
            cache: false, 
            data:"name=zah", /传参
            dataType: 'json',//返回值类型
          success:function(json){   
            alert(json[1].username+" "+ json[1].password);//弹出返回过来的List对象
                    }
           });
          }
    </script>
      </head>
      <body>
        <input type="button" name="b" value="测试"
      </body>
    </html>
  • 相关阅读:
    高低 接口
    算法
    一致连续性定理
    Brouwer fixed-point theorem
    minimum viable product
    Python星号*与**用法分析 What does ** (double star/asterisk) and * (star/asterisk) do for parameters? 必选参数 默认参数 可变参数 关键字参数
    zabbix 添加主机接口
    zabbix 添加主机接口
    zabbix 添加主机成功失败判断
    zabbix 添加主机成功失败判断
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4520088.html
Copyright © 2020-2023  润新知