Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2012, 12:11
Avatar de laqmaslocaesta
laqmaslocaesta
 
Fecha de Ingreso: octubre-2012
Mensajes: 26
Antigüedad: 12 años, 1 mes
Puntos: 1
respuesta en servlets

hola



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

}
Descomentando la linea :

Código:
    	//response.getWriter().print(jsonOuput);
He podido probar llamando desde el navegador que obtengo lo deseado para que el Ajax, lo interprete.

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:
<!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>
Muchas Gracias