No se declarar una clase en un jsp...???

Sergio
26 de Junio del 2009
Hola,
Estoy haciendo un proyecto con jsp como presentación ,java(j2sdk1.4.2), mysql5 y Tomcat (Apache Tomcat 5.0.28 Server).
Mi problema está en el momento de llamar desde un jsp a un servlet.
He probado a declarar una clase java desde el jsp de mil maneras diferentes y muchas de ellas deberían haber funcionado, ya que eran copiadas literalmente de proyectos que funcionan bien.
Esto me lleva a pensar que tengo un problema con tomcat. Cuando intento ejecutar una aplicacion jsp que tenga declarada una clase java me da el siguiente error:

org.apache.jasper.JasperException: No se puede compilar la clase para JSP

Ha tenido lugar un error en la línea: 30 en el archivo jsp: /prueba1.jsp
Error de servlet generado:
C:TomcatworkCatalinalocalhostpfcorgapachejspprueba1_jsp.java:73: cannot access org.apache.jsp.Project


Ha tenido lugar un error en la línea: 30 en el archivo jsp: /prueba1.jsp
Error de servlet generado:
bad class file: C:TomcatworkCatalinalocalhostpfcorgapachejspProject.class
class file contains wrong class: Project
Please remove or make sure it appears in the correct subdirectory of the classpath.
Project p = null;
^
1 error


Mi estructura de directorios de tomcat es:
pfc (mi dir root) /
WEB-INF/CLASSES
SRC
LIB
Dentro de web-inf tengo mi web.xml.

En el momento de darme el error que he puesto arriba había puesto el .class en la misma carpeta donde tomcat guarda los .class fruto de la compilación de los jsp.

He revisado manuales de tomcat y jsp sin éxito, se como debería funcionar la estructura de tomcat y he probado los ejemplos de jsp que trae tomcat y si funcionan pero no veo porque el mio no.

Alguien me puede arrojar algo de luz??
Muchas Gracias por todo!!

Chema
26 de Junio del 2009
Para qué quieres declarar una clase dentro de un JSP!!!!, aunque se pudiese, es una verdadera tontería.

Crear una JavaBean, y déjalo dentro de web-inf/classes y desde el jsp llámalo para que te haga lo que quiera, no?

Ken
26 de Junio del 2009
Una aclaración:

Un JavaBean es una clase que sigue una especificación concreta:

Sus propiedades son protegidas o privadas, y se accede a ellas mediante métodos get/set. Además, debería implementar Serializable (cosa que a la mayoría de nosotros se nos olvida).

Mira, desarrolla la clase como una clase más, aparte... métela dentro de un paquete (esto es necesario. Tomcat no coge bien las clases que están en el paquete por defecto) y llámala desde el JSP.

Si nos hacemos una clase llamada Cafe (que contiene propiedades como "marca", "sabor" y "precio" a las que accedemos con métodos getMarca, setMarca etc...) dentro de un paquete llamado "productos", al nivel del WEB-INF/classes hacemos una carpeta llamada "productos" y allí copiamos el Cafe.class

De este modo, ya está disponible para su uso. Ya es accesible desde los JSP. Previamente, en el JSP conviene importar el paquete "productos":

<%@page import="productos"%>

y ya la podemos usar:
<%
Cafe nigeria = new Cafe();
nigeria.setPrecio(12.30);
//...
%>

Eso para usar una clase al modo "Java" dentro de los JSP.

Pero, realmente, y como te indicaba Chema, lo suyo es usar una clase que cumpla con la especificación JavaBean en cuyo caso podríamos declarar dentro de la JSP:

<jsp:useBean id="nigeria" class="productos.Cafe" scope="page" />

por ejemplo.

Espero que con esto tengas suficiente para seguir tú solo... ya nos comentarás...

Un saludo,

Ken