2010-04-06 192 views
5

Tengo una aplicación simple jsp/servlet y quiero agregar la función AJAX a esta aplicación. Yo uso JQuery, pero no importa qué marco de JavaScript utilizo. Este es mi código:pasando datos de un servlet a código de JavaScript en una aplicación Ajax?

<script type="text/javascript"> 

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

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

      }); 
     }); 
    </script> 
    <body> 
     <a href="#" id="x">Increase it</a> 
     <div id="content"></div> 

    </body> 
</html> 

servlet

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); 

La Pregunta:

utilizo out.print para transferir datos desde un servlet de código Javascript (código Ajax), pero si tengo una estructura compleja como Vector of Objects o algo así, ¿cuál es la mejor manera de transferir los datos? ¿qué tal un archivo XML, JSON? ¿Existe alguna biblioteca especial jsp/servlets para transferir datos de un servlet a la aplicación ajax? ¿Cómo puedo analizar estos datos en la callbackFunction?

Respuesta

5

La mejor manera es usando JSON. Hay varias bibliotecas de Java que pueden convertir objetos completos de Java en una cadena JSON y viceversa. Además, se puede acceder a JSON en Javascript de una manera totalmente natural sin convertir/dar masajes a los datos en otro formato.

En cuanto a la parte del servidor, recomiendo seleccionar Google Gson como serializador JSON. Gson es la opción preferida ya que admite la conversión de Javabeans y matrices complejas, colecciones y mapas de ellos a JSON y viceversa sin inconvenientes en una sola línea de código. Incluso es compatible con los genéricos. Básicamente todo lo que necesita hacer es la siguiente:

Comprobar la user guide para aprender más sobre los poderes de Gson.

todos con todos, los siguientes en el lado del servidor es suficiente:

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)); 
} 
Cuestiones relacionadas