Pasar aplicación de Jserv a Tomcat

Tengo una aplicación que esta funcionando bajo Apache, con el modulo de Jserv instalado. El problema es que ahora quiero instalar esa misma aplicación bajo tomcat y no me funciona. Pongo los servlets en el directorio classes (dentro de Web-inf) y los jar dentro de /lib, pero nada, me da error de que no encuentra el servlet.

1 respuesta

Respuesta
1
A ver si has hecho estas cosillas:
¿1 Has creado el contexto y lo has activado?
¿2 Has puesto el archivo de descripción de aplicación en el sitio correcto?
¿Qué tomcat estas utilizando, una version 5 o una 4?
El contexto esta creado y activado. He incluido las siguientes lineas en el server.xml de tomcat:
<Context path="/apli" docBase="apli" debug="0" reloadable="true" />
La versión de tomcat es la 4.0.3, lo instale con el modulo de comunicación con apache.
He puesto el archivo web.xml, pero no he incluido nada en el (yo creo que el problema puede venir por aquí), no se lo que hay que poner. (Hay que declarar los servlets, pero no se como).
Pon este ocntexto:
<Context path="/apli" docBase="apli" debug="0"
reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="apli_log." suffix=".txt"
timestamp="true"/>
<Environment name="maxExemptions" type="java.lang.Integer"
value="15"/>
<Parameter name="context.param.name" value="context.param.value"
override="false"/>
</Context>
En el web.xml solo tinees que mapear los servlets, te pongo un ejemplo
<web-app>
<servlet>
<servlet-name>ArmorBuilder</servlet-name>
<display-name>WebBuilder</display-name>
<servlet-class>Builder</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Builder</servlet-name>
<url-pattern>/servlet/Builder</url-pattern>
</servlet-mapping>
</web-app>
este web.xml va dentro de WEB-INF
Esto debe funcionar, si no lo hace, enviame un log con unas peticiones y te atudare.
Primero decirte que me estas siendo de gran ayuda. Decirte que el problema creo que viene en el mapeo de servlets, pero no se como modificar lo siguiente para adapatarlo a mi aplicación.
Tengo las clases en el directorio classes, los .jar en el directorio /lib.
El problema es que la aplicación no la hice yo (ademas el que la hizo la desarrollo para el jserv), por eso estoy teniendo estos problemas.
Decirte que la aplicación original tiene unos archivos de extensión .properties, que tampoco se donde poner (y que la aplicación los usa porque en ellos están definidos direcciones email y tal).
Muchas gracias por tu ayuda.
<web-app>
<servlet>
<servlet-name>ArmorBuilder</servlet-name>
<display-name>WebBuilder</display-name>
<servlet-class>Builder</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Builder</servlet-name>
<url-pattern>/servlet/Builder</url-pattern>
</servlet-mapping>
</web-app>
Me alegro de ser te útil. A ver vamos a hacer una prueba para descartar definitivamente si es el contexto o es el mapeo de los servlet(luego cuando arreglemos eso, te diré cómo ver el código y así saber donde tienes que poner los properties para que funcione la aplicación)
Llama a un servlet de la aplicación del cual conozcas su nombre de la siguiente forma
http://tu_host/directorio_de_webapps/servlet/nombre_del_paquete.Nombre_del_servlet?
1.- Directorio de webapps es el directorio que contiene el WEB-INF que estamos manipulando
2.- Nombre del paquete es la subcarpeta de la subcarpeta de classes de WEB-INF donde esta el servlet( es decir el .class)
Si lo prueba y te da un error de java(por no encontrar el archivo por ejemplo) el contexto estará correctamente levantado
Si por el contrario te sale un pantallazo de los que seguro ya conoces (azul y blanco con la cabecera de las páginas de Apache-tomcat) será que el contexto no está activado de forma correcta.
Si ocurre lo primero ya faltará casi nada para que todo este arreglado... :D
Si no me he expresado bien o tienes cualquier duda no dudes en volver preguntar
Acabo de acabar de leer tu pregunta otra vez.
¿Te explico paso a paso como cambarlo ok?
Utilizaremos como base, para evitar escribir las cabeceras etc el web.xml del directorio WEB-INF de examples.
Cópialo al directorio WEB-INF de tu aplicación.
Ahora empezaremos a modificarlo:
1.- Borra todo lo que haya entre los tag´s <web-app>
por cada servlet que pueda ser llamado por el usuario pon lo siguiente:
<servlet>
<servlet-name>Nombre_con el_que_quieres_que_se_acceda_a_el(en minusculas)</servlet-name>
<display-name>Nombre_que_quieres_que_aparezca en el explorador durate_tu_llamada(no se ve casi unca)
<servlet-class>nombre_del_paquete.nombre_del_servlet(sin el .class)</servlet-class>
</servlet>
Y tambien este otro tag
<servlet-mapping>
<servlet-name>lo mismo que en el servlet-name de arriba</servlet-name>
<url-pattern>ruta_desde_el_Webapps/tu_dir/y_lo mismo_que_en_el_tag anterior>
</servlet-mapping>
Ahora supongamos que tienes un servlet en el paquete Tools de tu aplicación que se llama DimeElDia.class, y que tu aplicación cuelga de web-apps en un directorio llamado MiApplication
en el web.xml seria:
<servlet>
<servlet-name>quieroeldia</servlet-name>
<display-name>My-Application-Day</display-name>
<servlet-class>Tools.DimeElDia</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quieroeldia</servlet-name>
<url-pattern>/quieroeldia</url-pattern>
</servlet-mapping>
asi tu desde el explorador accederias a el poniendo:
Http://tu_host.com/MyApplication/quieroeldia?
Esperohaber respondido a lo que querías más precisamente que en el mensaje anterior
Los servlets me los encuentra, pero me da el siguiente error, cuando accedo a el:
WebMacro Error:
Could not initialize the broker!
*** Check that WebMacro.properties was in your servlet
*** classpath, in a similar place to webmacro.jar
*** and that all values were set correctly.
WebMacro was unable to create a broker, typically this
means that there was a problem loading the properties
file (null). Check your settings, your
classpath, and make sure everything is in place.
Pongo los .properties donde me dice, pero nada.
Yo creo que el contexto esta bien creado, ya que al intentar acceder a algunos servlets, me da error de que no acepta peticiones post/get.
Muchas gracias
Si, si te dan esos errores el contexto si que esta bien.
Los errores son de configuración de la aplicación, lo único que podrías hacer para ver donde colocar los properties, si no tienes el código fuente es descompilar las clases y así lo podrías ver.
Ahora ya no me da error de que no encuentra los .properties. Ahora el error que me da es el siguiente:
javax.servlet.ServletException: Invoker service() exception
...
...
Y una parrafada.
Sera cosa del mapeo de servlets en en web.xml.
Muchas gracias por tu atención
¿Podrías copiarme toda la pantalla?
¿Esa pantalla tiene dos párrafos?
Si sobre todo tiene dos párrafos, no te cortes en mandármelo y te diré lo que crea que es, ¿te parece?
type Exception report
message Internal Server Error
description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Invoker service() exception
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:504)
at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:216)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:479)
root cause
java.lang.NoSuchMethodError
at ResearchSvt.handle(ResearchSvt.java:100)
at org.webmacro.servlet.WMServlet.doRequest(WMServlet.java:255)
at org.webmacro.servlet.WMServlet.doPost(WMServlet.java:212)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:446)
at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:216)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:479)
El fallo en verdad no es el del invoker, sino el
java. Lang. NoSuchMethodError
at ResearchSvt.handle(ResearchSvt.java:100)
Por lo que parece, el doPost del servlet esta redirigido al doRequest del mismo, y dentro del cuerpo del doRequest, en la linea 255 del código como puedes ver aquí:
org. Webmacro. Servlet. WMServlet.doRequest(WMServlet.java:255)
En esa linea utilizas un método de la clase ResearchSvt
que el no encuentra en la version de la clase ResearchSvt que él tiene en el classpath. (Incluido su directorio classes y el lib del tomcat)
Así pues parece que la version del jar o de la case presente en classes con el mismo nombre no es la correcta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas