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

Problema con HttpServletResponse.sendRedirect()

Estas en el tema de Problema con HttpServletResponse.sendRedirect() en el foro de Java en Foros del Web. Hola!! soy nuevo en esto de la programación web con servlets y me ha surgido un problema con el metodo sendRedirect de HttpServletResponse, vereis, tengo ...
  #1 (permalink)  
Antiguo 21/09/2010, 13:55
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 6
Problema con HttpServletResponse.sendRedirect()

Hola!!
soy nuevo en esto de la programación web con servlets y me ha surgido un problema con el metodo sendRedirect de HttpServletResponse, vereis, tengo una aplicación web con la siguiente estructura:

-webapps(tomcat)
|-aplicacion1
|-WEB-INF
|-src
| |-IndexServlet.java
| |-InicioServlet.java
|-lib
| |-mysql.connector.jar
|-web.xml

esta estructura se corresponde con una aplicación de prueba que estoy creando, en ella esta el servlet IndexServlet en el que implemento los metodos doGet y doPost, cuando se accede al metodo doGet el servlet envía una salida html al cliente con una pagina web que contiene un formulario para iniciar sesión en el sistema, este formulario es enviado a su vez a este mismo servlet mediante post, en el metodo doPost recojo los datos de autenticación y realizo la consulta a la bbdd mysql, en el caso de que el login sea correcto redirijo al usuario al servlet InicioServlet mediante response.sendRedirect("/InicioServlet") y ahí es donde surge el proble pues en lugar de redirigir a http://host:8080/aplicacion1/InicioServlet redirige a http://host:8080/InicioServlet. ¿No se supone que el contexto de IndexServlet es /aplicacion1?? Estoy haciendo algo mal?? A ver si alguien me puede echar una manita con el tema, de antemano gracias y un saludo.

A continuación muestro el código de IndexServlet:

Código PHP:
Ver original
  1. import java.io.*;
  2. import java.sql.*;
  3. import javax.Servlet.*;
  4. import javax.HttpServlet.*;
  5.  
  6. public class IndexServlet extends HttpServlet {
  7.     private static final long serialVersionUID = 1L;
  8.     private Connection conn;
  9.        
  10.  
  11.     public IndexServlet() {
  12.         super();
  13.     }
  14.  
  15.  
  16.     public void init(ServletConfig config) throws ServletException {
  17.         super.init(config);
  18.         String dbhost,dbname,dbuser,dbpass;
  19.         dbhost=config.getInitParameter("host");
  20.         dbname=config.getInitParameter("database");
  21.         dbuser=config.getInitParameter("dbuser");
  22.         dbpass=config.getInitParameter("dbpass");
  23.         try{
  24.             Class.forName("com.mysql.jdbc.Driver");
  25.             conn = DriverManager.getConnection("jdbc:mysql://"+dbhost+"/"+dbname,dbuser,dbpass);
  26.            
  27.         } catch(ClassNotFoundException e){
  28.             e.printStackTrace();
  29.             throw new UnavailableException(e.getMessage());
  30.         } catch(SQLException e){
  31.             e.printStackTrace();
  32.             throw new UnavailableException(e.getMessage());
  33.         }
  34.     }
  35.  
  36.  
  37.     public void destroy() {
  38.         // TODO Auto-generated method stub
  39.         try{
  40.            
  41.             conn.close();
  42.         } catch(SQLException e){
  43.             e.printStackTrace();
  44.         }
  45.     }
  46.  
  47.  
  48.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  49.         // TODO Auto-generated method stub
  50.         enviarPaginaHtml(response,false);
  51.     }
  52.  
  53.  
  54.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  55.         // TODO Auto-generated method stub
  56.         HttpServletRequest req = request;
  57.         HttpServletResponse res = response;
  58.         String user, pass;
  59.         user = req.getParameter("user");
  60.         pass=req.getParameter("pass");
  61.         String query="select cdg from usuario where descripcion='"+user+"'"+
  62.             "and pass='"+pass+"'";
  63.         try{
  64.         Statement stm = conn.createStatement();
  65.         ResultSet res1 = stm.executeQuery(query);
  66.         // Si los datos de acceso eran correctos
  67.         if(res1.next()){
  68.             String cdg = res1.getString(1);
  69.             HttpSession session = request.getSession(true);
  70.             session.setAttribute("user",cdg);
  71.             res.sendRedirect("InicioServlet");
  72.         }
  73.         // si la validacion no ha sido correcta
  74.         else{
  75.             enviarPaginaHtml(res,true);
  76.         }
  77.         } catch(SQLException e){
  78.             e.printStackTrace();
  79.             res.sendRedirect("IndexServlet");
  80.         }
  81.        
  82.     }
  83.    
  84.     public void enviarPaginaHtml(HttpServletResponse res,boolean error) throws ServletException,IOException {
  85.         res.setContentType("text/html");
  86.         PrintWriter out = res.getWriter();
  87.         out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD "
  88.                 + "XHTML 1.0 Strict//EN\" \"http://www.w3.org"
  89.                 + "/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
  90.         out.println("<html><head><title>Aplicación 1 - Iniciar sesi&oacute;n</title></head>");
  91.         out.println("<body><form name='frm-login' action='/IndexServlet' method='post'>");
  92.         out.println("<h2>Iniciar sesi&oacute;n</h2>");
  93.         if(error){
  94.             out.println("<div style='color: red; font-size: 10px; font-weight: bold'>");
  95.             out.println("El usuario y/o contraseña introducidos no son correctos");
  96.             out.println("</div>");
  97.         }
  98.         out.println("<table align='center' border='0' cellpadding='0'>");
  99.         out.println("<tr><td>Usuario:</td><td><input type='text' name='user' size='15' "+
  100.                 "value='' /></td></tr>");
  101.         out.println("<tr><td>Contraseña:</td><td><input type='password' name='pass' size='15' "+
  102.                 "value='' /></td></tr>");
  103.         out.println("<tr><td colspan='2'><input type='submit' name='enviar' value='Enviar' /></td></tr>");
  104.         out.println("</table>");
  105.         out.println("</form>");
  106.         out.println("</body></html>");
  107.         out.flush();
  108.         out.close();
  109.     }
  110.  
  111. }

y aqui el descriptor de despliegue por si el problema tiene que ver con este

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3.   <display-name>aplicacion1</display-name>
  4.   <welcome-file-list>
  5.     <welcome-file>IndexServlet</welcome-file>
  6.     <welcome-file>index.html</welcome-file>
  7.     <welcome-file>index.htm</welcome-file>
  8.     <welcome-file>index.jsp</welcome-file>
  9.     <welcome-file>default.html</welcome-file>
  10.     <welcome-file>default.htm</welcome-file>
  11.     <welcome-file>default.jsp</welcome-file>
  12.   </welcome-file-list>
  13.   <servlet>
  14.     <description>Servlet que realiza el login de usuarios en el sistema</description>
  15.     <display-name>IndexServlet</display-name>
  16.     <servlet-name>IndexServlet</servlet-name>
  17.     <servlet-class>IndexServlet</servlet-class>
  18.     <init-param>
  19.       <description>Host de la base de datos</description>
  20.       <param-name>host</param-name>
  21.       <param-value>localhost</param-value>
  22.     </init-param>
  23.     <init-param>
  24.       <description>Nombre de la base de datos</description>
  25.       <param-name>database</param-name>
  26.       <param-value>test</param-value>
  27.     </init-param>
  28.     <init-param>
  29.       <description>Usuario de la base de datos</description>
  30.       <param-name>dbuser</param-name>
  31.       <param-value>root</param-value>
  32.     </init-param>
  33.     <init-param>
  34.       <description>Contraseña de la base de datos</description>
  35.       <param-name>dbpass</param-name>
  36.       <param-value>mysqladm</param-value>
  37.     </init-param>
  38.   </servlet>
  39.   <servlet-mapping>
  40.     <servlet-name>IndexServlet</servlet-name>
  41.     <url-pattern>/IndexServlet</url-pattern>
  42.     <url-pattern>/index</url-pattern>
  43.     <url-pattern>/index.*</url-pattern>
  44.   </servlet-mapping>
  45.   <servlet>
  46.     <description>Servlet que gestiona el menu de opciones de la aplicacion</description>
  47.     <display-name>InicioServlet</display-name>
  48.     <servlet-name>InicioServlet</servlet-name>
  49.     <servlet-class>InicioServlet</servlet-class>
  50.   </servlet>
  51.   <servlet-mapping>
  52.     <servlet-name>InicioServlet</servlet-name>
  53.     <url-pattern>/InicioServlet</url-pattern>
  54.     <url-pattern>/inicio</url-pattern>
  55.     <url-pattern>/inicio.*</url-pattern>
  56.   </servlet-mapping>
  57. </web-app>
  #2 (permalink)  
Antiguo 24/09/2010, 11:01
Avatar de lukos  
Fecha de Ingreso: enero-2008
Ubicación: ikikin
Mensajes: 22
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Problema con HttpServletResponse.sendRedirect()

Y si tratas con la ruta entera?
aplicacion1/XXX
  #3 (permalink)  
Antiguo 26/09/2010, 10:53
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Problema con HttpServletResponse.sendRedirect()

al final solucioné el problema, creo que el error no lo tenía en el response.sendRedirect sino en el atributo action del formulario, creo que el problema consistía en que la ruta la ponía como "/ServletDestino" y al poner la barra inicial toma como ruta base el directorio raiz de tomcat, el problema se soluciona poniendo simplemete "ServletDestino" sin barra inicial, de este modo toma como ruta base la del contexto del servlet que realiza la redirección.

Etiquetas: jsp-servlets
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 20:29.