Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2015, 17:54
Avatar de Ferkhis
Ferkhis
 
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años, 6 meses
Puntos: 2
Pregunta Acceder a datos JSON en Servlet

Hola a todos!

Estoy tratando de aprender cómo acceder a datos JSON en un servlet en su método doPost(), que llegan desde un cliente que emplea Ajax (XMLHttpRequest). No sé qué método como getParameter() usar para referirme a los datos enviados en la solicitud, ni tampoco qué objetos crear como Gson, JSONParser y demás. He visto muchos ejemplos en varias páginas, pero ninguno me funciona. Todos me devuelven Null, me dan algún error, o arrojan java.lang.NullPointerException. Si alguien pudiera darme un ejemplo usando alguna de las librerías gson, java-json o json-simple, se lo agradecería. Este es mi código hasta ahora:

HTML (index.html):

Código HTML:
Ver original
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5.         <title>AJAX JSON Example</title>
  6.         <script type="text/javascript" src="ajaxjsonfunctions.js"></script>
  7.     </head>
  8.     <body>
  9.         <input type="text" id="name" name="name" value="PuMa" placeholder="Name..."/>
  10.         <input type="text" id="age" name="age" value="28" placeholder="Age..."/>
  11.         <input type="text" id="country" name="country" value="Colombia" placeholder="Country..."/>
  12.         <input type="button" id="sendjsonpost" name="sendjsonpost" value="Send JSON POST" />
  13.         <hr/>
  14.     </body>
  15. </html>

JavaScript, Ajax (ajaxjsonfunctions.js):

Código Javascript:
Ver original
  1. window.onload = function()
  2. {
  3.     var sendjsonpost = document.getElementById("sendjsonpost");
  4.  
  5.     xhr = new XMLHttpRequest();
  6.  
  7.     sendjsonpost.onclick = function()
  8.     {
  9.         var name = document.getElementById("name").value;
  10.         var age = document.getElementById("age").value;
  11.         var country = document.getElementById("country").value;
  12.  
  13.         if (name == "" || age == "" || country == "")
  14.             alert("Debe ingresar todos los datos.");
  15.         else
  16.             enviarDatosPost(name, age, country);
  17.     }
  18.  
  19.     function enviarDatosPost(name, age, country)
  20.     {
  21.         xhr.onreadystatechange = prepararRespuestaPost;
  22.         xhr.open("POST", "MessagesJSON", true);
  23.         xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  24.         var datosJSON = crearDatosJSON(name, age, country);
  25.         alert(JSON.stringify(datosJSON));
  26.         xhr.send(JSON.stringify(datosJSON));
  27.     }
  28.  
  29.     function crearDatosJSON(name, age, country)
  30.     {
  31.         var datosJSON = {name : name, age : age, country : country};
  32.         return datosJSON;
  33.     }
  34.  
  35.     function prepararRespuestaPost()
  36.     {
  37.         if (xhr.readyState == 4)
  38.         {
  39.             if (xhr.status == 200)
  40.             {
  41.                 alert(xhr.responseText +" --- " + xhr.statusText);
  42.             }
  43.         }
  44.     }
  45. }

Servlet (MessagesJSON.java):

Código Java:
Ver original
  1. package com.puma.servlets;
  2.  
  3. import java.io.IOException;
  4. import java.util.Iterator;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. import org.json.*;
  13. import org.json.JSONObject;
  14. import org.json.simple.*;
  15.  
  16. @WebServlet(asyncSupported = true, urlPatterns = { "/MessagesJSON" })
  17. public class MessagesJSON extends HttpServlet
  18. {
  19.     private static final long serialVersionUID = 1L;
  20.  
  21.     public MessagesJSON()
  22.     {
  23.         super();
  24.     }
  25.  
  26.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  27.     {
  28.         response.getWriter().append("Served at: ").append(request.getContextPath());
  29.     }
  30.  
  31.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  32.     {
  33.         //******************QUÉ DEBO HACER AQUÍ?*******************
  34.     }
  35. }