关于jquery:将数据从servlet传递到Ajax应用程序中的javascript代码?

passing data from a servlet to javascript code in an Ajax application?

本问题已经有最佳答案,请猛点这里访问。

我有一个简单的jsp / servlet应用程序,我想为这个应用程序添加AJAX功能。 我使用JQuery,但我使用的javascript框架并不重要。 这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script type="text/javascript">

        function callbackFunction(data){
            $('#content').html(data);
        }
        $('document').ready(function(){

            $('#x').click(function() {
              $.post('/ajax_2/servlet',callbackFunction)

            });
        });
   
    <body>
        Increase it
       

    </body>
</html>

Servlet的

1
2
3
4
5
6
7
8
    HttpSession session = request.getSession();
    Integer myInteger = (Integer)session.getAttribute("myInteger");
    if(myInteger == null)
        myInteger = new Integer(0);
    else
        myInteger = new Integer(myInteger+1);
    session.setAttribute("myInteger", myInteger);
    response.getWriter().println(myInteger);

问题:

我使用out.print将数据从servlet传输到javascript代码(ajax代码),但是如果我有一个复杂的结构,比如Vector of Objects或类似的东西,那么传输数据的最佳方法是什么? 怎么样的XML文件,JSON? 是否有任何特殊的jsp / servlets库将数据从servlet传输到ajax应用程序? 如何在callbackFunction中解析这些数据?


最好的方法是使用JSON。 有几个Java库可以将完整的Java对象转换为JSON字符串,反之亦然。 可以在Javascript中以完全自然的方式访问JSON,而无需以其他格式转换/按摩数据。

至于服务器端部分,我强烈建议选择Google Gson作为JSON序列化程序。 Gson是首选,因为它支持将复杂的Javabeans及其数组,集合和映射转换为JSON,反之亦然,而不需要在一行代码中轻松完成。 它甚至支持泛型。 基本上你需要做的就是以下几点:

1
String json = new Gson().toJson(object);

查看用户指南以了解有关Gson功能的更多信息。

总而言之,服务器端的以下内容就足够了:

1
2
3
4
5
public static void writeJson(HttpServletResponse response, Object object) throws IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(new Gson().toJson(object));
}