No se puede ejecutar mi servlet del servidor Tomcat a pesar de que las clases están en el paquete

StackOverflow https://stackoverflow.com/questions/4621572

Pregunta

Estoy tratando de conseguir mi servlet para correr, he estado buscando durante 2 días y tratar todas las soluciones posibles y no hubo suerte. La clase Servet se encuentra en la carpeta correspondiente (es decir, bajo el nombre de paquete). También he añadido los archivos jar necesarios en mi servlet en la carpeta lib. el archivo web.xml mapea la URL y define el servlet. Así que lo hice todo en la documentación y la gente wt dijeron aquí y sigue recibiendo este error:

    type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class assign1a.RPCServlet
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:282)
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1687)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:619)
root cause

java.lang.NoClassDefFoundError: assign1a/RPCServlet (wrong name: server/RPCServlet)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1143)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1638)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:282)
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1687)
    java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    java.lang.Thread.run(Thread.java:619)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.5 logs.

También aquí es mi código de servlet:

package assign1a;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lib.jsonrpc.RPCService;

public class RPCServlet extends HttpServlet {

        /**
         * 
         */
        private static final long serialVersionUID = -5274024331393844879L;


        private static final Logger log = Logger.getLogger(RPCServlet.class.getName());

        protected RPCService service = new ServiceImpl();

        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                response.setContentType("text/html");
                response.getWriter().write("rpc service " + service.getServiceName() +  " is running...");
        }

        public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {

                try {
                        service.dispatch(request, response);
                } catch (Throwable t) {
                        log.log(Level.WARNING, t.getMessage(), t);
                }
        }

}

Por favor, ayúdame :) Gracias.

EDIT: he aquí el contenido de mi archivo web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">  


    <servlet>
        <servlet-name>jsonrpc</servlet-name>
        <servlet-class>assign1a.RPCServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>jsonrpc</servlet-name>
        <url-pattern>/rpc</url-pattern>
    </servlet-mapping>

</web-app>
¿Fue útil?

Solución

Me dio cuenta de la phrase(wrong name: server/RPCServlet) en el mensaje de error.

Esto generalmente significa que el archivo de clase tiene un nombre de paquete diferente de la estructura de directorios en el tarro / guerra.

RPCServlet.java Tal vez se pone inicialmente bajo un server dir llamado y luego, más tarde se trasladó a RPCServlet.java assign1a?

O tal vez el paquete original definida como:

package server;

Y entonces cambió más tarde a

package assign1a;

De cualquier manera, para resolverlo, sugiero que elimine todo el material compilado (archivos de clase, archivos de guerra, etc.). Parar Tomcat, a continuación, elimine el directorio <TOMCAT_HOME>/work sólo para estar seguro de que todo se ha ido.

A continuación, comprobar para estar absolutamente seguro de que RPCServlet.java está en una carpeta con el nombre assign1a y asegúrese de que se define el paquete como:

package assign1a;

recompilación / reconstrucción de la guerra y que debe estar en un estado mejor. Tal vez intente la construcción de la guerra en Eclipse (o Netbeans) porque de esa manera no va a dejar que se compila en una carpeta que no coincide con los archivos de clase nombre del paquete.

Buena suerte. - David

Otros consejos

su error "noClassDefFound" significa que Tomcat no puede encontrar assign1a.RPCServlet cuando lo necesita. con el fin de Tomcat para encontrar la clase en cuestión, que debe estar en la ruta de clase de Tomcat. la mejor manera de decirlo no sería para asegurarse de que está en la carpeta de clases. Sin embargo, la búsqueda de esta carpeta puede ser un poco complicado D:. existen varias posibilidades, dependiendo del sistema que estás, cómo se está desarrollando, y cómo se va a implementar

Para comenzar, mirando debajo de la carpeta de instalación de Tomcat, en una carpeta llamada aplicaciones web. allí, encontrará una carpeta con el nombre [contexto] como en su URL http: // localhost: 8080 / [contexto] / RPC. ¿Lo ves? la carpeta debe ser nombrado como el URL que está utilizando. (que sería más fácil para dar ayuda exacta, si se había proporcionado información exacta, es dificil sin conocer la URL que está utilizando.) en esta carpeta, busque la carpeta WEB-INF, y allí, usted debe encontrar una carpeta de clases con nombre. Bajo esta carpeta debe tener una carpeta con el nombre assign1a, y allí debe tener la RPCServlet.class archivo, que es el archivo compilado.

Así que, en resumen corto: [tomcat_install_folder] / webapps / [contexto] /WEB-INF/classes/assign1a/RPCServlet.class no se encuentra. ah, y barras diagonales son de barras curso hacia atrás en las ventanas:)

Eclipse con proyecto web dinámico

También, si está desarrollando en Eclipse, y está usando un servidor Tomcat dentro de Eclipse, a continuación, la carpeta de Tomcat es en realidad en un lugar totalmente diferente. A continuación, encontrará debajo de su espacio de trabajo de Eclipse, en la carpeta .metadata / .plugins / org.eclipse.wst.server.core / tmp0 / [contexto] wtpwebapps / tmp0 donde podría ser tmp1 o algo más, dependiendo del número de servidores Tomcat que ha puesto en marcha en virtud de su espacio de trabajo de Eclipse.

Si usted todavía no puede entenderlo, por favor enviar más información sobre la configuración de (es decir. Develoment ide, escenario de implementación, visitando url, web.xml)

java.lang.NoClassDefFoundError: assign1a/RPCServlet (wrong name: server/RPCServlet)

¿Ve una carpeta llamada / assign1a bajo / WEB-INF / classes en su guerra? Y lo hace contiene un archivo llamado RPCServlet.class? Si no, usted tiene que compilar el servlet.

Publica tu web.xml y mostrar sus entradas <servlet> y <servlet-mapping>.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top