Foro de elhacker.net

Programación => Java => Mensaje iniciado por: pequezere en 12 Abril 2012, 14:49 pm



Título: Ayuda con Servlet
Publicado por: pequezere en 12 Abril 2012, 14:49 pm
Hola

El caso es que llevo un tiempo atascado con un ejercicio y no soy capaz de resolverlo, a ver si alguien me puede ayudar.

Tengo que crear un único servlet que cuando recibe una petición busca en la sesión un atributo llamado color y y, si existe, lo establece de color de fondo. Además, tiene que construir un formulario con un select de cuatro colores y un botón de submit. Al hacer el submit se reenvía la petición al mismo servlet que almacena el valor del select en la sesión.

Para el formulario tengo el siguiente html:
Código
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2.  <TITLE>Colores</TITLE>
  3. </HEAD>
  4.  
  5. <BODY BGCOLOR="#FDF5E6">
  6. <H1 ALIGN="CENTER">Colores</H1>
  7.  
  8. <FORM ACTION="color" METHOD="get">
  9.  
  10. <td>Elija un color de fondo:</td>
  11. <td><INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Rojo">Rojo<BR>
  12.  <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Azul">Azul<BR>
  13.  <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Amarillo">Amarillo<BR>
  14.  <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Verde">Verde</td>
  15. <tr>
  16. </tr>
  17.  
  18.  <CENTER>
  19.    <INPUT TYPE="SUBMIT" VALUE="Aceptar">
  20.  </CENTER>
  21. </FORM>
  22.  
  23. </BODY>
  24. </HTML>

Y para el servlet en sí, esta estructura:
Código
  1. import java.io.*;
  2. import java.io.PrintWriter;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.lang.*;
  6.  
  7.  
  8. public class Color extends HttpServlet implements Servlet {
  9.    public void doGet (HttpServletRequest request,
  10.                        HttpServletResponse response)
  11.    throws ServletException, IOException {
  12.  
  13.    response.setContentType("text/html");
  14.    PrintWriter out = response.getWriter();    
  15.  
  16.    out.println( "Color seleccionado" );
  17. out.println
  18.  }  
  19. }

El problema es que he leído sobre el tema en manuales y webs varios (incluyendo códigos de ejemplo) y no consigo entender como hacer lo que me pide el enunciado. Si alguien me lo pudiera explicar se lo agradecería muchísimo.


Título: Re: Ayuda con Servlet
Publicado por: pequezere en 13 Abril 2012, 10:47 am
No sé si me expliqué bien. Creo que lo que debo hacer es reescribir la URL en función de lo seleccionado en el formulario del html, pero no se como hacerlo.


Título: Re: Ayuda con Servlet
Publicado por: pequezere en 14 Abril 2012, 12:25 pm
Hola

He conseguido que me funcione con el siguiente código:
Código
  1. import java.io.*;
  2. import java.io.PrintWriter;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.lang.*;
  6.  
  7. public class Color extends HttpServlet implements Servlet {
  8.    String color;
  9.    public void doGet (HttpServletRequest request,
  10.       HttpServletResponse response)
  11. throws ServletException, IOException {
  12.  
  13. color=request.getParameter ("nombreColor");
  14.  
  15. response.setContentType ("text/html");
  16. PrintWriter out = response.getWriter ();
  17.  
  18. out.println ("<html>");
  19. out.println ("<body bgcolor=/"+color+">");
  20. out.println ("<h1>");
  21. out.println ("Ha seleccionado el color "+color+"");
  22. out.println ("</h1>");
  23. out.println ("</body>");
  24. out.println ("</html>");
  25.    }
  26. }

Sin embargo, al cambiar el color de fondo no coincide con el seleccionado ¿alguien me podría explicar por qué me ocurre esto? (el formulario no lo he modificado.
Gracias


Título: Re: Ayuda con Servlet
Publicado por: Gallu en 15 Abril 2012, 18:39 pm
Le estás pasando el color en castellano , creo que ese es el problema, mejor si le asignas los colores en inglés o en RGB ...

Por otro lado , el enunciado dice que debes mirar si existe el atributo en la session, no en la request , con lo cual entiendo que lo que debes de hacer es lo siguiente :

1.- Recoger el parámetro de la request.
2.- Buscar en la session por el atributo buscado, y si existe, cambiar el color basándose en lo que recibes en la request.

Espero haberte ayudado.
Saludos.


Título: Re: Ayuda con Servlet
Publicado por: pequezere en 16 Abril 2012, 11:15 am
Citar
Le estás pasando el color en castellano , creo que ese es el problema, mejor si le asignas los colores en inglés o en RGB ...
También probé y no funcionaba, al parecer el problema era la / de ("<body bgcolor=/"+color+">");

De todas formas muchas gracias por tu ayuda :)

Dejo el código corregido por si a alguien más le sirve:
Código
  1. import java.io.*;
  2. import java.io.PrintWriter;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.lang.*;
  6.  
  7. public class Color extends HttpServlet implements Servlet {
  8.    public void doGet (HttpServletRequest request,
  9.       HttpServletResponse response)
  10. throws ServletException, IOException {
  11.  
  12. String color=request.getParameter ("nombreColor");
  13.  
  14.  
  15. response.setContentType ("text/html");
  16. PrintWriter out = response.getWriter ();
  17.  
  18. out.println ("<html>");
  19. out.println ("<head>");
  20.  
  21. out.println ("</head>");
  22. out.println ("<body bgcolor="+color+">");
  23. out.println ("<h1>");
  24. out.println ("Ha seleccionado color");
  25. out.println ("</h1>");
  26. out.println ("</body>");
  27. out.println ("</html>");
  28.    }
  29. }