Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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 (html4strict) [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
 <TITLE>Colores</TITLE>
</HEAD>

<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">Colores</H1>

<FORM ACTION="color" METHOD="get">
<table>

<td>Elija un color de fondo:</td>
<td><INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Rojo">Rojo<BR>
 <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Azul">Azul<BR>
 <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Amarillo">Amarillo<BR>
 <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="Verde">Verde</td>
<tr>
</tr>

</table>
 <CENTER>
   <INPUT TYPE="SUBMIT" VALUE="Aceptar">
 </CENTER>
</FORM>

</BODY>
</HTML>


Y para el servlet en sí, esta estructura:
Código (java) [Seleccionar]
import java.io.*;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;


public class Color extends HttpServlet implements Servlet {
   public void doGet (HttpServletRequest request,
                       HttpServletResponse response)
   throws ServletException, IOException {
     
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();    

   out.println( "Color seleccionado" );
out.println
 }  
}


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 (java) [Seleccionar]
import java.io.*;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;

public class Color extends HttpServlet implements Servlet {
    String color;
    public void doGet (HttpServletRequest request,
       HttpServletResponse response)
throws ServletException, IOException {

color=request.getParameter ("nombreColor");

response.setContentType ("text/html");
PrintWriter out = response.getWriter ();

out.println ("<html>");
out.println ("<body bgcolor=/"+color+">");
out.println ("<h1>");
out.println ("Ha seleccionado el color "+color+"");
out.println ("</h1>");
out.println ("</body>");
out.println ("</html>");
    }
}


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
CitarLe 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 (java) [Seleccionar]
import java.io.*;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;

public class Color extends HttpServlet implements Servlet {
    public void doGet (HttpServletRequest request,
       HttpServletResponse response)
throws ServletException, IOException {

String color=request.getParameter ("nombreColor");


response.setContentType ("text/html");
PrintWriter out = response.getWriter ();

out.println ("<html>");
out.println ("<head>");

out.println ("</head>");
out.println ("<body bgcolor="+color+">");
out.println ("<h1>");
out.println ("Ha seleccionado color");
out.println ("</h1>");
out.println ("</body>");
out.println ("</html>");
    }
}