Dudas basicas

Raul
29 de Junio del 2003
Hola a todos, llevo poco tiempo en esto y tengo algunas dudas basicas ahí van:
1) He hecho una pequeña aplicaciòn que contiene varios servlets, uno de estos servlets instancia una clase hecha por mí, todas la clases
las tengo guardadas en ...WEB-INFclasses de Tommcat entonces cuando ejecuto la aplicacion (un pequeño formulario) resulta que todo va bien hasta que el servlet intenta instanciar la clase mia, me dá un error como que no la encuentra, he provado de todo, sobre todo he intentado poner todo en el mismo paquete package tomocat.aplicacion.WEB-INF.classes pero al compilar me dá error en WEB-INF (en el guion) ¡Entonces como lo hago para que la aplicacion ademas de servlets tenga clases mias y que estos puedan acceder a ellas? quizas en el descriptor?
no sé.. gracias

2) Bien supongamos que que tengo una aplicacion hecha, pues bien al subirla al servidor, si tengo algunos archivos con rutas especificas, por ejm
c: TomcacmiAplicacionarchivoelquesea pues bien si desde una clase hago referencia a ese archivo con esa direccion o pach, entonces al subir la aplicacion al servidorJava con el .war ¿no encontrará ese archivo? pues su pach ya no es C:/.... como se hace entonces? tiene que ver con lo de direcciones relativas o absolutas, por cierto que diferencia hay entra una y otra.
Gracias por adelantado

Jose Carlos
29 de Junio del 2003
Hola Raul,

A ver, sobre la primera duda:

Por lo que entiendo, el problema ocurre solo con una clase, cuando uno de tus servlet quiere utilizar algún método de ésta tomcat se queja... Todo debería funcionar si la clase está en el mismo paquete, y si no has definido ningun paquete todo debería de ir bien si la clase se encuentra en el mismo directorio que el .class del servlet. No tienes que incluir estas clases en el web.xml ni nada parecido, si las clases estan en el mismo directorio ( /WEB-INF/classes ) todo debe funcionar normalmente. Si todo esto lo tienes bien probablemente el problema lo tengas en el código java. Comprueba el mensaje de error que te muestra tomcat en tu navegador, suele decir el número de linea en la que ocurre algo :)

Mi pregunta es ¿llegas a llamar al servlet? No se si desde el formulario accedes al servlet o el problema empieza ahí. Quiero decir, una vez que pulsas el boton "enviar" en tu formulario, entras dentro del servlet y cuando éste quiere utilizar un método de esa clase "perdida" falla? o falla nada más entrar en el servlet? A lo mejor el problema lo tienes en la direccion que le estas dando en la etiqueta FORM del HTML.

Lo normal es referenciar los Servlet del siguiente modo:

<form action="/servlet/NombreClase" ...>

Esto depende de como esté tu archivo web.xml Deberías tener algo parecido a:

<servlet>
<servlet-name>NombreClase</servlet-name>
<description>Servlet para Raul</description>
<servlet-class>MiServlet</servlet-class>
<servlet-mapping>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
</servlet>

En este ejemplo tendrías una clase MiServlet.class dentro de /WEB-INF/classes y la referenciarías con /servlet/NombreClase :)

Sobre la segunda pregunta:

Una direccion absoluta es:

c:Mis DocumentosCarpetaDeImagenesMiFoto.jpg

a ella puedes acceder desde cualquier lugar, porque estas poniendo toda la información para llegar a ella.

Una direccion relativa es:

CarpetaDeImagenesMiFoto.jpg

En este caso la direccion solo tiene sentido si estas situado dentro de C:Mis Documentos

Quédate con esto: Una direccion absoluta contiene toda la información para llegar a un recurso, y una direccion relativa contiene sólo parte de esta información.

Con los .war es igual. Un .war es básicamente un .zip con un poquito de información extra... Contiene la estructura de directorios que se necesita en el servidor tomcat. Entonces, si tu tienes los siguientes archivos:

c:Mis documentosmiAplicacionServlet.class
c:Mis documentosmiAplicacionClase.class
c:Mis documentosmiAplicacionFormulario.html

no puedes guardar los archivos en el .war desde c:, deberías tener en tu disco duro lo siguiente:

c:Mis documentosmiAplicacionWEB-INFclassesServlet.class
c:Mis documentosmiAplicacionWEB-INFclassesClase.class
c:Mis documentosmiAplicacionWEB-INFweb.xml
c:Mis documentosmiAplicacionFormulario.html

y crear el archivo .war desde c:Mis documentosmiAplicacion

Entonces si ves el contenido del .war tendras:

WEB-INFclassesServlet.class
WEB-INFclassesClase.class
WEB-INFweb.xml
Formulario.html

Esto, como te he dicho antes, lo puedes ver como rutas "relativas" :) y podrás dejar tu .war dentro del /webapps del servidor y podrás acceder a él automaticamente :)

Espero haber sido de ayuda... he intentado explicarlo de forma simpl, pero suelo hacerlo bastante mal ;) si tienes dudas no dudes en escribirme.

Un saludo, y suerte