Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/09/2010, 13:55
beni0888
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 15 años, 7 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>