Foros del Web » Programación para mayores de 30 ;) » Java »

Comunicacion entre Jsp y Servlet?

Estas en el tema de Comunicacion entre Jsp y Servlet? en el foro de Java en Foros del Web. Gracias de Antemano por tomarse la molestia de lerr....... Tengo 1 jsp con un boton (Index.jsp), que mediante el method="Post" lo manda al servlet Listar.java ...
  #1 (permalink)  
Antiguo 14/05/2012, 02:11
Avatar de teto100  
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Comunicacion entre Jsp y Servlet?

Gracias de Antemano por tomarse la molestia de lerr.......


Tengo 1 jsp con un boton (Index.jsp), que mediante el method="Post" lo manda al
servlet Listar.java
Código java:
Ver original
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  2. <!DOCTYPE html>
  3. <html>
  4.     <head>
  5.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6.         <title>JSP Page</title>
  7.     </head>
  8.     <body>
  9.         <form name="produ" action="<%=request.getContextPath()%>/Listar" method="post">
  10.                  
  11.             <input type="submit" name="btnEnviar" value="VER">
  12.         </form>
  13.     </body>
  14. </html>


Aquí el Método consulta que retorna un objeto de la clase Vector
llamado "reg". (donde esta toda la consulta sql)
(EL QUE CREA LA CONEXION Y RECORRE LA TABLA)

Método "consulta" de la clase Sql

Código Java:
Ver original
  1. // Ejecuta Select simple
  2.     static public Vector consulta(String sql) {
  3.         Vector regs = new Vector();
  4.        
  5.         try {
  6.             Conexion        db = new Conexion();
  7.             Connection      cn = db.getConnection();
  8.            
  9.             if (cn == null) {
  10.                 regs = null;
  11.             } else {
  12.                 Statement       st = cn.createStatement();
  13.                 ResultSet       rs = st.executeQuery(sql);
  14.                 ResultSetMetaData   rm = rs.getMetaData();
  15.                 int         numCols = rm.getColumnCount();
  16.                
  17.                 // Toma los títulos de las columnas
  18.                 String[] titCols= new String[numCols];
  19.                 for(int i=0; i<numCols; ++i)
  20.                     titCols[i]= rm.getColumnName(i+1);
  21.                
  22.                 // la fila 0 del vector lleva los títulos de las columnas
  23.                 regs.add(titCols);
  24.                
  25.                 // toma las filas de la consulta
  26.                 while(rs.next()) {
  27.                     String[] reg= new String[numCols];
  28.                    
  29.                     for(int i=0; i<numCols; i++) {
  30.                         reg[i] = rs.getString(i + 1);
  31.                     }
  32.                    
  33.                     regs.add(reg);
  34.                 }
  35.                
  36.                 rs.close();
  37.                 st.close();
  38.                 cn.close();
  39.             }
  40.            
  41.         } catch(SQLException e) {
  42.             regs= null;
  43.         } catch(Exception e) {
  44.             regs= null;
  45.         }
  46.        
  47.         return regs;
  48.     }

Aquí el Servlet Listar.java(Método doPost) , que iguala el resultado del metodo consulta de la clase Sql con un objeto de la clase Vector.


Código Java:
Ver original
  1. import java.io.IOException;
  2. import java.io.PrintWriter;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.util.Vector;
  8. import javax.servlet.RequestDispatcher;
  9.  
  10.  
  11.  
  12. public class Listar extends HttpServlet {
  13.    
  14.      
  15.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  16.             throws ServletException, IOException {
  17.         response.setContentType("text/html;charset=UTF-8");
  18.         PrintWriter out = response.getWriter();
  19.     }
  20.  
  21.     @Override
  22.     protected void doGet(HttpServletRequest request, HttpServletResponse response)
  23.             throws ServletException, IOException {
  24.         processRequest(request, response);
  25.     }
  26.  
  27.     @Override
  28.    
  29.     protected void doPost(HttpServletRequest request, HttpServletResponse response)
  30.             throws ServletException, IOException {
  31.         processRequest(request, response);
  32.         response.setContentType("text/html;charset=UTF-8");
  33.         PrintWriter out = response.getWriter();
  34.      
  35.         try {
  36.             String sql="select * from Producto";
  37.             Vector llenar = new Vector();
  38.            
  39.             llenar = Sql.consulta(sql);
  40.             System.out.println(llenar);
  41.        
  42.             RequestDispatcher rd = null;
  43.             request.setAttribute("Miprodu", llenar);
  44.             rd = request.getRequestDispatcher("Productos.jsp");
  45.             rd.forward(request, response);
  46.              
  47.         } catch (Exception ex) {
  48.             System.out.println("el error es :" + ex);
  49.         }
  50.        
  51.     }
  52.    
  53.     @Override
  54.     public String getServletInfo() {
  55.         return "Short description";
  56.     }// </editor-fold>
  57. }

Cita:
String sql="select * from Producto";
Vector llenar = new Vector();

llenar = Sql.consulta(sql);

Ya tengo en el Objeto "llenar" el resultado de mi consulta pero
Como hago para mandar este objeto de la clase vector a un jsp (Productos.jsp)?
yo puse:


Cita:
RequestDispatcher rd = null;
request.setAttribute("Miprodu", llenar);
rd = request.getRequestDispatcher("Productos.jsp");
rd.forward(request, response);
Pero no me deja crear un objeto de la clase vector en el jsp

Código java:
Ver original
  1. <%@page import="java.util.Vector"%>
  2. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5.     <head>
  6.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7.         <title>JSP Page</title>
  8.     </head>
  9.     <body bgcolor="e0e0f8">
  10.         <form value="Miprodu">
  11.             <textarea>
  12.                 <%
  13.                     Vector v = new Vector();
  14.  
  15.                    v = request.getParameter(llenado);
  16.                 %>
  17.             </textarea>
  18.             <a href = "index.jsp"> << REGRESAR </a>
  19.         </form>
  20.     </body>
  21. </html>
  22. </body>
  23. </html>


Les agradecería que me ayudaran llevo días con esto...

Última edición por teto100; 14/05/2012 a las 02:22
  #2 (permalink)  
Antiguo 14/05/2012, 02:30
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Comunicacion entre Jsp y Servlet?

Deberías decir qué error te da.

A primera vista,

v = request.getParameter(llenado);

debería ser

v = (Vector) request.getAttribute("Miprodu");

Tampoco haces nada con el vector recuperado, así que difícilmente vas a saber si lo has leído o no.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 14/05/2012, 02:43
Avatar de teto100  
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Comunicacion entre Jsp y Servlet?

No me da ningún error es que quiero poner v en un text area o una tabla para ver los resultados de la consulta de la BD
  #4 (permalink)  
Antiguo 14/05/2012, 03:30
 
Fecha de Ingreso: mayo-2012
Ubicación: UK
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: Comunicacion entre Jsp y Servlet?

Y por que no implementas un for, para cada elemento del vector y que haga algo como:

Código PHP:
<%
for (... 
cada elemento de v)
{

System.out.println("<tr><td>"+v.get(i)+"<td><tr>");
}

%> 
  #5 (permalink)  
Antiguo 14/05/2012, 03:43
Avatar de teto100  
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Comunicacion entre Jsp y Servlet?

Cita:
Iniciado por adrianS Ver Mensaje
Y por que no implementas un for, para cada elemento del vector y que haga algo como:

Código PHP:
<%
for (... 
cada elemento de v)
{

System.out.println("<tr><td>"+v.get(i)+"<td><tr>");
}

%> 

Te refieres a hacer esto?

Cita:
<%
Vector v = new Vector();
v = (Vector) request.getAttribute("Miprodu");

for (int i=0; v.size();i++) {
System.out.println("<tr><td>"+v.get(i)+"<td><tr>") ;
}
%>
  #6 (permalink)  
Antiguo 14/05/2012, 05:26
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Comunicacion entre Jsp y Servlet?

System.out no sirve para mostrar datos en la jsp, deberías leer algún tutorial de JSP, te veo muy perdido.

http://www.jsptut.com/Scriptlets.jsp

Cita:
If you run the above example, you will notice the output from the "System.out.println" on the server log. This is a convenient way to do simple debugging (some servers also have techniques of debugging the JSP in the IDE. See your server's documentation to see if it offers such a technique.)

By itself a scriptlet does not generate HTML. If a scriptlet wants to generate HTML, it can use a variable called "out". This variable does not need to be declared. It is already predefined for scriptlets, along with some other variables. The following example shows how the scriptlet can generate HTML output.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 14/05/2012, 05:48
 
Fecha de Ingreso: mayo-2012
Ubicación: UK
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 5
Respuesta: Comunicacion entre Jsp y Servlet?

Si ciertamente quería decir:

Cita:
<%
Vector v = new Vector();
v = (Vector) request.getAttribute("Miprodu");

for (int i=0; v.size();i++) {
out.println("<tr><td>"+v.get(i)+"<td><tr>") ;
}
%>
Por supuesto:
a) for (... cada elemento de v) esto no es un for
b) Esto saca por System... System.out.println();
  #8 (permalink)  
Antiguo 14/05/2012, 05:49
Avatar de teto100  
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Comunicacion entre Jsp y Servlet?

Cita:
Iniciado por Xerelo Ver Mensaje
System.out no sirve para mostrar datos en la jsp, deberías leer algún tutorial de JSP, te veo muy perdido.

[url]http://www.jsptut.com/Scriptlets.jsp[/url]

Le di quote al comentario anterior por eso salio el System.out.println();

En definitiva tengo un objeto de la clase Vector con mi consulta sql, como lo plasmo el resultado de mi consulta en un jsp , usando Servlet.
  #9 (permalink)  
Antiguo 14/05/2012, 07:33
Avatar de teto100  
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 12 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Comunicacion entre Jsp y Servlet?

Bueno logre resolverlo parcialmente , cree un método que me retorna un String y ya no un Objeto de la clase producto.

Clase Sql

Código java:
Ver original
  1. static public String ver (String sql){
  2.         String regs ="";
  3.        
  4.         try{
  5.             Conexion        db = new Conexion();
  6.             Connection      cn = db.getConnection();
  7.            
  8.             if (cn == null) {
  9.                
  10.             } else {
  11.                 Statement       st = cn.createStatement();
  12.                 ResultSet       rs = st.executeQuery(sql);
  13.                 ResultSetMetaData   rm = rs.getMetaData();
  14.                            
  15.             // toma las filas de la consulta
  16.                 while(rs.next()) {
  17.        regs+=("Codigo Producto"+rs.getString("Cod_Producto"))+"\t";
  18.        regs+=("Nombre Producto"+rs.getString("Nombre"))+"\t";
  19.        regs+=("Marca Producto"+rs.getString("Marca"))+"\n";
  20.                     }
  21.            
  22.                     rs.close();
  23.                 st.close();
  24.                 cn.close();
  25.             }
  26.         }catch(Exception e){
  27.             System.out.println(e);
  28.         }
  29.         return regs;
  30.     }


en mi servlet lo recepciono y lo mando asi:

Código java:
Ver original
  1. try {
  2.             String sql = "select * from Producto";
  3.             String z = Sql.ver(sql);
  4.             request.setAttribute("z", z);
  5.             RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher("/Productos.jsp");
  6.             reqDispatcher.forward(request, response);
  7.  
  8.  
  9.         } catch (Exception ex) {
  10.             System.out.println("el error es :" + ex);
  11.         }
  12.  
  13.     }

y en mi jsp de destino recepciono lo que manda el servlet así:

Código java:
Ver original
  1. <body bgcolor="e0e0f8">
  2.         <textarea>
  3.             <%    
  4.                 String message = "";
  5.                 message = (String) request.getAttribute("z");
  6.                 out.println(message);
  7.             %>
  8.         </textarea>
  9.         <a href = "index.jsp"> << REGRESAR </a>
  10.     </body>


Pero no me es suficiente, quiero mostrar un objeto de la Clase Vector en un tabla de un jsp, alguien me hecha un cable?

Etiquetas: jsp-servlets, response, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:15.