soy nueva con los servlets y he llegado a un punto en el que no se seguir.
Tengo una pagina HTML/Ajax que externamente, mediante JSON, llama a una aplicación creada en servlet (eclipse), que se conecta a una base de datos PostgreSQL. (El sistema tiene que ser asi, porque se me pide como requisito)
El sistema es un ubuntu, apache2, tomcat7
He configurado las cabeceras en el Apache2 para permitir el cross-site
He probado la conexión a base de datos y funciona perfectamente.
El codigo del servlet es:
Código:
Descomentando la linea :package servlets; import java.io.IOException; import java.sql.ResultSet; import java.util.ArrayList; 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 javax.swing.JOptionPane; import com.google.gson.Gson; import bd.conexion; import Mensaje.Mensaje; import Alumno.Alumno; /** * Servlet implementation class Listar */ @WebServlet("/Listar") public class Listar extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() public Listar() { super(); // TODO Auto-generated constructor stub }*/ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //String s="Hola Mundo"; response.setContentType("application/json"); response.setHeader("Access-Control-Allow-Origin", "*"); //PrintWriter out=response.getWriter();//??? String jsonOuput; Mensaje sms; try{ //Class.forName("org.postgresql.Driver").newInstance();//??? conexion conn = new conexion(); JOptionPane.showMessageDialog(null,"Conexion Establecida"); String consulta="select * from alumno"; ResultSet rs=conn.getStmt().executeQuery(consulta); if(rs!=null){ ArrayList<Alumno> array= new ArrayList<Alumno>(); while(rs.next()){ String nombre=rs.getString("nombre"); String apellido=rs.getString("apellido"); int edad=rs.getInt("edad"); String correo=rs.getString("correo"); array.add(new Alumno(nombre,apellido,edad,correo)); } sms=new Mensaje(1,array); }else{ sms=new Mensaje(0,"No existen alumnos en la base de datos"); } Gson gson=new Gson(); jsonOuput=gson.toJson(sms); // JOptionPane.showMessageDialog(null,jsonOuput); conn.cerrarConexion(); //response.getWriter().print(jsonOuput); }catch(Exception er){ JOptionPane.showMessageDialog(null,"Error de conexión"); } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub processRequest(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub processRequest(request,response); } }
Código:
He podido probar llamando desde el navegador que obtengo lo deseado para que el Ajax, lo interprete.//response.getWriter().print(jsonOuput);
Ahora lo que quiero conseguir es que en la respuesta se introduzca el valor de la variable jsonOuput, y que llegue a Ajax, pero soy incapaz de conseguirlo.
Alguien me puede orientar por favor.
el codigo Ajax es:
Código:
Muchas Gracias <!DOCCTYPE html> <html> <head> <title>Pagina Ejemplo1</title> <script language="javascript"> function consulta() { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4) { alert(xmlhttp.responseText); //Texto a ejecutar cuando llega la respuesta var personas=JSON.parse(xmlhttp.responseText); //Miraremos que tipo de mensaje nos han enviado //tipo 0 = La base de datos esta vacia //tipo 1 = Alumnos en la base de datos if(personas.tipo==0){ document.getElementById("txtHint").innerHTML= personas.list; }else{//si hemos encontrado el alumno, procedemos a introducirlo en una tabla para mostrarlo cont=document.getElementById("txtHint"); if(cont){ var longitud=personas.list.length; var html="<table border=1 cellspacing=0 cellpadding=5 vspace=20 width=50%><tr>"; html+="<th>Nombre y Apellido</th>"; html+="<th>Edad</th>"; html+="<th>Correo</th>"; html+="</tr>"; for(i=0;i<longitud;i++){ html+="<tr>"; html+="<td>"+personas.list[i].nombre+"</td>"; html+="<td>"+personas.list[i].edad+"</td>"; html+="<td>"+personas.list[i].correo+"</td>"; html+="</tr>"; } html+="</table>"; cont.innerHTML=html; }else{ document.getElementById("txtHint").innerHTML= xmlhttp.responseText; } document.getElementById('fiel').innerHTML=""; } } } xmlhttp.open("GET","http://192.168.1.37:8080/estudio/Listar",true); xmlhttp.send(); } </script> </head> <body> <h2 align=center>Menu de acciones</h2> </br> <div id="txtHint"><script>document.write(consulta()); </script></div> <form > <fieldset id="fiel"> </fieldset> </form> </body> </html>