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
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <input type="text" id="name" name="name" value="PuMa" placeholder="Name..."/> <input type="text" id="age" name="age" value="28" placeholder="Age..."/> <input type="text" id="country" name="country" value="Colombia" placeholder="Country..."/> <input type="button" id="sendjsonpost" name="sendjsonpost" value="Send JSON POST" /> <hr/> </body> </html>
JavaScript, Ajax (ajaxjsonfunctions.js):
Código Javascript:
Ver original
window.onload = function() { var sendjsonpost = document.getElementById("sendjsonpost"); xhr = new XMLHttpRequest(); sendjsonpost.onclick = function() { var name = document.getElementById("name").value; var age = document.getElementById("age").value; var country = document.getElementById("country").value; if (name == "" || age == "" || country == "") alert("Debe ingresar todos los datos."); else enviarDatosPost(name, age, country); } function enviarDatosPost(name, age, country) { xhr.onreadystatechange = prepararRespuestaPost; xhr.open("POST", "MessagesJSON", true); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); var datosJSON = crearDatosJSON(name, age, country); alert(JSON.stringify(datosJSON)); xhr.send(JSON.stringify(datosJSON)); } function crearDatosJSON(name, age, country) { var datosJSON = {name : name, age : age, country : country}; return datosJSON; } function prepararRespuestaPost() { if (xhr.readyState == 4) { if (xhr.status == 200) { alert(xhr.responseText +" --- " + xhr.statusText); } } } }
Servlet (MessagesJSON.java):
Código Java:
Ver original
package com.puma.servlets; import java.io.IOException; import java.util.Iterator; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.*; import org.json.JSONObject; import org.json.simple.*; @WebServlet(asyncSupported = true, urlPatterns = { "/MessagesJSON" }) public class MessagesJSON extends HttpServlet { private static final long serialVersionUID = 1L; public MessagesJSON() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //******************QUÉ DEBO HACER AQUÍ?******************* } }