servlet与ajax数据交换(json格式)

JSON数据格式:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

(1)“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

(2)值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

JSON具体的表现形式:

(1)对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

例:{“name”:“zhangsan”} //单属性        或者多个属性     {“name”:“lisi”,“sex”:“男” } // 具体对象

(2)数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

例: ["value1","value2","value3"] //数组形式     [{“name”:“zhangsan1”},{“name”:“zhangsan2”},{“name”:“zhangsan3”}] //对象数组

Servlet与前端ajax的数据交互:

主要流程为  前端获取数据通过ajax的异步传输传至servlet,servlet处理数据后,通过response回传至前端页面。

注意: 一般在传输过程中会遇到两个比较常见的问题,第一就是传回前端时乱码问题,这个问题可以通过 在servlet处理方法中加入:response.setCharacterEncoding("UTF-8")解决;第二就是传至前端后,不会触发ajax中的回调函数,原因是因为servlet传回的json数据格式不合法而没有触发ajax的success状态。

关于servlet返回的json数据处理方法:

(1)自己拼接json字符串(出错率较高),使其数据满足json格式

JSON对于servlet处理格式要求,键必须加双引号,值分为字符串和数字,数字可不加引号,字符串必须加引号

例:      {“"name":"zhansan", "age":13, "sex":"男" }   // 这种为标准格式,字符串类型加引号,纯数字可不加

将一个独立对象转为以上的格式的字符串形式,才可以通过response.getWrite.append()传至前端 ajax 中,成功处罚回调函数

String  result = "{"+"/"name/""+":"+"/""+name+"/""+","+"/"age/""+":"+"/""+age+"/""+","+"/"sex/""+":"+"/""+sex+"/""+"}";

(2)调用第三方封装好的  json 数据转换方法(个人使用的是Gson,链接地址:https://pan.baidu.com/s/1Yu91BYlqoJSXpzk37ZXZ6g

建议使用这种方法,高效,简洁,适用于各种数据集合(list,map等)。详细使用可看下列实例(具体代码1)。

具体实例代码1(采用第一种字符串拼接方式)

前端html部分(含ajax)

 1 <html>
 2 <head>
 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 4 <title>Insert title here</title>
 5 <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
 6 </head>
 7 <body>
 8     <div class="box">
 9           <table>
10             <tr>
11               <td>姓名</td>
12               <td><input name="username" type="text"></td>
13             </tr>
14             <tr>
15               <td>性别</td>
16               <td><input name="sex" type="text"></td>
17             </tr>
18             <tr>
19               <td>年龄</td>
20               <td><input name="age" type="text"></td>
21             </tr>
22             <tr>
23               <td>手机号</td>
24               <td><input name="phone" type="text"></td>
25             </tr>
26             <tr><td><button>提交</button></td></tr>
27           </table>
28     </div>
29       <div>
30       <table>
31                                  信息返回
32             <tr>
33               <td>姓名</td>
34               <td id="name"></td>
35             </tr>
36             <tr>
37               <td>性别</td>
38               <td id="sex"></td>
39             </tr>
40             <tr>
41               <td>年龄</td>
42               <td id="age"></td>
43             </tr>
44             <tr>
45               <td>手机号</td>
46               <td id="phone"></td>
47             </tr>
48           </table>
49     </div>
50     <script>
51       $(function(){
52             $("button").click(function(){
53                 $.post("AjaxTest",
54                         {‘username‘:$("input[name=username]").val(),
55                          ‘sex‘:$("input[name=sex]").val(),
56                          ‘age‘:$("input[name=age]").val(),
57                          ‘phone‘:$("input[name=phone]").val()},
58                         function(data,textStatus){
59                              console.log(textStatus);
60                              console.log(data.username);
61                             $("#name").html(data.username);
62                             $("#sex").html(data.sex);
63                             $("#age").html(data.age);
64                             $("#phone").html(data.phone);
65                         },"json");
66           });
67
68        })
69     </script>
70 </body>
71 </html>

后端servlet部分(字符串拼接)

servlet部分
@WebServlet("/AjaxTest")
public class AjaxTest extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public AjaxTest() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name = request.getParameter("username");
        String sex = request.getParameter("sex");
        String age = request.getParameter("age");
        String phone = request.getParameter("phone");
         response.setCharacterEncoding("UTF-8");
         response.setContentType("application/json");  

        User one = new User(name,sex,age,phone);
        String result = one.toString();
        System.out.println(result);
        response.getWriter().append(result);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

User类

public class User  {
  private String username;
  private String sex;
  private String age;
  private String phone;
  public User(String username, String sex, String age, String phone) {

    this.username = username;
    this.sex = sex;
    this.age = age;
    this.phone = phone;
}

public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex;
}
public String getAge() {
    return age;
}
public void setAge(String age) {
    this.age = age;
}
public String getPhone() {
    return phone;
}
public void setPhone(String phone) {
    this.phone = phone;
}

@Override
public String toString() {
    return "{" +  "\"username\"" + ‘:‘ + "\""+ username +"\"" + ","+ "\"sex\""+‘:‘ +"\"" +sex +"\""+‘,‘+ "\"age\""+‘:‘ + "\"" + age + "\"" +‘,‘+"\"phone\""+‘:‘ + "\""+phone+"\"" + "}";
}
}

具体实例代码2(采用gson转换json方式处理)

前端代码(含ajax)

 1 <html>
 2 <head>
 3
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 5 <title>Insert title here</title>
 6 <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
 7 </head>
 8 <body>
 9 <input type="text" name="cc"  / >
10 <input type="submit" />
11 <div>
12      姓名:<span id="name"></span> <br/>
13      性别:<span id="sex"></span><br/>
14      年龄: <span id="age"></span>
15 </div>
16 </form>
17   <script type="text/javascript">
18        $(function(){
19            $("input[type=submit]").click(function(){
20                $.post("ajax",
21                    {"cc":$("input[name=cc]").val()},
22                  function(data,textStatus){
23                       console.log(data.name);
24                       $("#name").html(data.name);
25                       $("#sex").html(data.sex);
26                       $("#age").html(data.age);
27                    },
28                  "json"
29                );
30             });
31
32        })
33   </script>
34 </body>
35 </html>

servlet部分(调用gson方法)

servlet部分
@WebServlet("/ajax")
public class ajax extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ajax() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setCharacterEncoding("utf-8");
        String c = request.getParameter("cc");
        System.out.println(c);
        User one = new User(c, "男", 13);
        Gson gson = new Gson();
        String result = gson.toJson(one);
        response.getWriter().append(result);

    }
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

User类部分

public class User {
  private String name;
  private String sex;
  private int age;
public User(String name, String sex, int age) {
    this.name = name;
    this.sex = sex;
    this.age = age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

}

具体实例代码3(多组数据传至ajax)

前端代码(含ajax)

 1 <html>
 2 <head>
 3
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 5 <title>Insert title here</title>
 6 <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
 7 </head>
 8 <body>
 9 <input type="text" name="ceshi">
10 <input type="submit" value="获取名单"/>
11 <table id="table">
12
13 </table>
14 </form>
15   <script type="text/javascript">
16        $(function(){
17            $("input[type=submit]").click(function(){
18                $.post("ajax",
19                    {"ceshi":$("input[name=ceshi]").val()},
20                  function(data,textStatus){
21                       console.log(data);
22                       for(var i = 0;i<data.length; i++)
23                         {
24                          $("#table").append( $("<tr></tr>")
25                                  .append($("<td></td>").html(data[i].name))
26                                  .append($("<td></td>").html(data[i].sex))
27                                  .append($("<td></td>").html(data[i].age)));
28                         }
29                    },
30                  "json"
31                );
32             });
33
34        })
35   </script>
36 </body>
37 </html>

servlet部分(调用gson方法处理数据)

 1 servlet部分
 2 @WebServlet("/ajax")
 3 public class ajax extends HttpServlet {
 4     private static final long serialVersionUID = 1L;
 5
 6     /**
 7      * @see HttpServlet#HttpServlet()
 8      */
 9     public ajax() {
10         super();
11         // TODO Auto-generated constructor stub
12     }
13     /**
14      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
15      */
16     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
17         // TODO Auto-generated method stub
18         response.setCharacterEncoding("utf-8");
19         String string = request.getParameter("ceshi");
20         Gson gson = new Gson();
21         List list = new ArrayList();
22         User one = new User("张三", "男", 13);
23         User two = new User("李四","男", 15);
24         User three = new User("王五","男", 20);
25         list.add(one);
26         list.add(two);
27         list.add(three);
28
29         String result = gson.toJson(list);
30         response.getWriter().append(result);
31     }
32     /**
33      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
34      */
35     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
36         // TODO Auto-generated method stub
37         doGet(request, response);
38     }
39
40 }
41
42 User类
43
44
45 public class User {
46   private String name;
47   private String sex;
48   private int age;
49 public User(String name, String sex, int age) {
50     this.name = name;
51     this.sex = sex;
52     this.age = age;
53 }
54 public String getName() {
55     return name;
56 }
57 public void setName(String name) {
58     this.name = name;
59 }
60 public String getSex() {
61     return sex;
62 }
63 public void setSex(String sex) {
64     this.sex = sex;
65 }
66 public int getAge() {
67     return age;
68 }
69 public void setAge(int age) {
70     this.age = age;
71 }
72
73 }

原文地址:https://www.cnblogs.com/TheGCC/p/8891251.html

时间: 2024-08-25 08:43:46

servlet与ajax数据交换(json格式)的相关文章

jquery ajax调用返回json格式数据处理

Ajax请求默认的都是异步的 如果想同步 async设置为false就可以(默认是true) var html = $.ajax({ url: "some.php", async: false }).responseText; 返回json数组取条数用result.length <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs"

Servlet获取ajax传递的json值

Servlet获取ajax传递的json值 其实标题可直接写为“记一件愚蠢的事”.另外声明这是只是一篇水文. 原本都用SpringMVC和ajax进行前后台的交互,今天打算试试用原始的Servlet与其进行交互. 起初是打算实现一个跳转(虽然感觉没什么意义): Action如下: package per.zww.ajax.action; import java.io.IOException; import javax.servlet.ServletException; import javax.

C# 任意类型数据转JSON格式

每天都是不一样,积极的去感受生活 C# 任意类型数据转JSON格式 /// <summary> /// List转成json /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonName"></param> /// <param name="list"></para

关于多条数据转为json格式单次传输的问题 2017.05.27

数据形式如下: var mycars = [];//定义数组存放多条数据 for(var i=0;i<2;i++){ var jsonData = {};//定义变量存放单条数据 jsonData.MainCmdID = 1; jsonData.SubCmdID = i; mycars[i]=JSON.stringify(jsonData);//单挑数据转为json格式,存放到数组 } var toStr="";//定义字符变量准备拼接json for (var i=0;i<

了解php数据转json格式与前端交互基础

php数据转json格式与前端交互 ArryJson1.php <?php $test=array(); $word=array("我12","要43","把23","你65","们7","全87","都","吃","掉79","嗯78","啊09","蒙67",

在Sql Server 2016中使用For Json子句把数据作为json格式导出

原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/export-query-result-as-json-format-in-sql-server-2016/ 使用for json子句把查询结果作为json字符串导出,将作为sql server 2016中首先可用的一个特性.如果你熟悉for xml子句,那么将很容易理解for json: select ccolumn, expression, column as ali

springmvc 后台向页面EasyUI的Datagrid传递数据(JSon格式)

===============EasyUIDatagrid 分页==================== EasyUIDatagrid 需要提供的JSon格式为:total和rows,所以我们只需要在后台中返回一个JSon格式为total和rows //定义一个EasyUIDatagridResult 类来包装JSon数据 public class EasyUIDatagridResult { private long total;  //返回JSon中的total值 private List<

利用 js-xlsx 实现 Excel 文件导入并解析Excel数据成json格式的数据并且获取其中某列数据

演示效果参考如下:XML转JSON 另一个搭配SQL实现:http://sheetjs.com/sexql/index.html 详细介绍: 1.首先需要导入js <script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script> 2.导入文件框 这里importExcel(this)是方法,名字可以自己定义. <input type="file"onchang

[TimLinux] JavaScript AJAX接收到的数据转换为JSON格式

1. 接收数据 AJAX接收数据是通过xhr.responseText属性,这是一个属性不是一个方法,这个属性得到的数据为字符串. 2. 字符串内容 当服务器发送的是一个JsonResponse({'name':'Tim', 'sex': 'male'})这样的数据时(Django服务器),前端 xhr.responseText 属性得到的字符串值为"{'name':'Tim', 'sex':'male''}",再次强调这是一个字符串 3. 字符串转换为JSON 字符串转换为JSON,