Foro

[Ayuda]¿Alguien me puede ayudar con un Java Servlet?

Otros lugares, otras opciones :: Sin clasificar :: [Ayuda]¿Alguien me puede ayudar con un Java Servlet?

Este hilo ha sido cerrado.
14/04/2012, 18:52

Hola

Estoy creando un servlet en java para que me cambie el color de fondo de una página según la selección del usuario. El caso es que el servlet funciona pero el color que me muestra no coincide con el seleccionado y no entiendo por qué (seguro que es una bobada, pero no le veo el fallo).

Si alguien se anima a echarle un vistazo y comentarme que le pasa se lo agradecería mucho. ( Se puede descargar aquí: http://www.4shared.com/zip/G5fVrUkq/ejercicio.html)

Gracias

P.D: No sé si tendrá algo que ver pero uso tomcat7 en Ubuntu.

14/04/2012, 20:37

No voy a descargarlo porque me pide que me registre, pero qué estás haciendo para cambiar el color? Imagino que el usuario selecciona un color (link, radio con submit, etc... no importa demasiado) la llamada va al servlet y la página se recarga. Pero qué haces para cambiar el color, un css en la página? La página la creas en el servlet o usas una jsp?

Puede ser que el browser esté manteniendo la página en cache y no esté cargando los nuevos cambios, en ese caso deberías de poner en los cabezales que no guarde cache y que el browser tome la página por completo del servidor.

Poner algo como

response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", -1);

Podría solucionarlo.

14/04/2012, 21:29
Editado: 14/04/2012, 21:32

No voy a descargarlo porque me pide que me registre

Anda, no lo sabía.

Gracias por contestar, he probado a añadir las líneas que me dices y sigue igual. Copio aquí lo que tengo, que así se entenderá mejor.

El formulario html:


*    <!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 para el fondo:</td>
<td><INPUT TYPE="RADIO" NAME="nombreColor" VALUE="#FF0000">Rojo<BR>
  <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="#0000FF">Azul<BR>
  <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="#FFFF00">Amarillo<BR>
  <INPUT TYPE="RADIO" NAME="nombreColor" VALUE="#00FF00">Verde<BR></td>
<tr>
</tr>

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

</BODY>
</HTML>    *

 

y el Servlet:

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 color");
out.println ("</h1>");
out.println ("</body>");
out.println ("</html>");
    }
}

14/04/2012, 23:24
Editado: 14/04/2012, 23:26

Prueba de agregar un tag head a la respuesta. Dentro del tag ponle los cabezales que te pasé como meta tags.

<meta http-equiv="expires" content="-1" />

<meta http-equiv="cache-control" content="no-cache" />

<meta http-equiv="Pragma" content="no-cache" />

 

Además, cuando hagas html los tags deberían de estar en minúscula. HTML acepta mayúsculas pero si llegaras a utilizar un protocolo más estricto como xhtml entonces fallará.

El String color de la clase no tiene sentido que sea una variable del objeto, de hecho un servlet no debería de tener variables. Tendría que ser una variable local al método.

Más info sobre las tecnologías web en la w3c. Los meta tags: http://www.w3schools.com/tags/tag_meta.asp

15/04/2012, 14:04

No sé si te he entendido bien, me queda así la respuesta:

out.println ("<html>");
out.println ("<head>");
out.println ("<meta http-equiv=/"expires" content="-1" />");
out.println ("<meta http-equiv=/"cache-control" content="no-cache" />");
out.println ("<meta http-equiv=/"Pragma" content="no-cache" />");
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>");
    }
}

Pero no compila, lo del String color no entiendo a que te refieres (es que estoy empezando y me lío un poco) ¿no es necesario para recoger y utilizar el parámetro nombreColor?

Gracias por tu ayuda (y por los links, no sabía que había w3c en castellano)

15/04/2012, 16:55

No compla porque necesitas escapar las comillas. Si usas " estás cortando el string, debes usar ".

out.println ("<meta http-equiv="expires" content="-1" />");

A lo que me refiero con el String color es que hagas

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

O sea, que utilices una variable local al método.

Otra cosa, acabo de notar que pones

"<body bgcolor=/"+color+">"

Eso está mal y quizás sea por ello que no funciona. Debería ser

"<body bgcolor="" + color + "">"

Para escapar caracteres siempre debes usar , no /.

No habías probado a ver el html generado? Deberías hacerlo, verás que lo que tenías te genera

<body bgcolor=/#FF0000>

16/04/2012, 11:10

No habías probado a ver el html generado?

Pues me había liado tanto que ni se me había ocurrido :).

Ya conseguí que funcionara correctamente, al parecer el problema era la barra de "<body bgcolor=/"+color+">" como tu decías.

Muchas gracias por tu ayuda.

PD: Si algún día te pierdes por Zamora, te debo unas birras XD

16/04/2012, 11:19

Yo para estos problemas suelo usar firebug y va de lujo para ver que falla en las paginas web que genera o si quieres modificarlas para ir probando sin tocar el codigo y luego ir a tiro fijo.

16/04/2012, 11:36

Gracias machera, lo probaré.

Este hilo ha sido cerrado.