Non è possibile eseguire il mio servlet dal server Tomcat anche se le classi sono a pacchetto

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

Domanda

sto cercando di ottenere il mio servlet di corsa, ho cercato per 2 giorni e cercando ogni possibile soluzione e senza fortuna. La classe Servet si trova nella cartella appropriata (cioè sotto il nome del pacchetto). Ho anche aggiunto i file jar necessari nella mia servlet nella cartella lib. il file web.xml associa l'url e definisce il servlet. Così ho fatto tutto nella documentazione e la gente WT detto qui e ancora ottenere questo errore:

    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.

Anche qui è il mio codice 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);
                }
        }

}

Please help me :) Grazie.

EDIT: qui sono il contenuto del mio file 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>
È stato utile?

Soluzione

ho notato la phrase(wrong name: server/RPCServlet) nel messaggio di errore.

Questo di solito significa che il file di classe ha un nome di un pacchetto diverso da quello della struttura di directory nel vaso / guerra.

Forse è stato originariamente messo RPCServlet.java sotto una directory di nome server e poi, RPCServlet.java successivamente trasferito a assign1a?

O forse confezione originale definita come:

package server;

E poi si cambiò in seguito al

package assign1a;

In entrambi i casi, per risolverlo, vi suggerisco di eliminare tutto il materiale compilato (file di classe, i file di guerra, ecc). Arrestare Tomcat, quindi eliminare la directory <TOMCAT_HOME>/work solo per essere sicuri che tutto è andato.

Poi, controllare per essere assolutamente sicuri che RPCServlet.java si trova in una cartella denominata assign1a e assicurarsi che il pacchetto è definito come:

package assign1a;

Riconversione / ricostruire la guerra e si dovrebbe essere in uno stato migliore. Forse provare a costruire la guerra in Eclipse (o Netbeans) perché in questo modo non vi permetterà di compilare in una cartella che non corrisponde il nome del pacchetto file di classe.

Buona fortuna. - Dave

Altri suggerimenti

l'errore "NoClassDefFound" significa che il gatto non riesce a trovare assign1a.RPCServlet quando ne ha bisogno. al fine per Tomcat per trovare la classe in questione, deve essere il percorso di classe di Tomcat. il modo migliore di mettere lì sarebbe quello di assicurarsi che sia in classi-cartella. tuttavia, trovare questa cartella può essere un po 'complicato D:. ci sono diverse possibilità, a seconda di quale sistema si è in, come si sta sviluppando, e come si sta distribuendo

inizia cercando nella cartella di installazione di Tomcat, in una cartella denominata webapps. in là, trovare una cartella denominata [contesto] come in l'URL http: // localhost: 8080 / [contesto] / RPC. vedi? la cartella deve essere denominata come URL che si sta utilizzando. (che sarebbe stato più facile dare aiuto esatto, se si fosse fornito informazioni esatte, è dificile senza conoscere l'URL che si sta utilizzando.) in questa cartella, trovare la cartella WEB-INF, e là, si dovrebbe trovare una cartella denominata classi. in questa cartella è necessario disporre di una cartella denominata assign1a, e lì è necessario avere la RPCServlet.class file, che è il file compilato.

Così, in breve estratto: [tomcat_install_folder] / webapps / [contesto] /WEB-INF/classes/assign1a/RPCServlet.class è mancante. oh, e le barre sono di tagli naturalmente indietro sulle finestre:)

Eclipse con il progetto web dinamico

Inoltre, se si sta sviluppando in Eclipse, e utilizza un interno eclisse server Tomcat, quindi la cartella Tomcat è in realtà in una posizione completamente diversa. poi trovare sotto l'area di lavoro di Eclipse, nella cartella .metadata / .plugins / org.eclipse.wst.server.core / tmp0 / wtpwebapps / [contesto] dove tmp0 potrebbe essere tmp1 o qualcosa d'altro, a seconda di come molti server Tomcat aver avviato sotto l'area di lavoro di Eclipse.

Se ancora non può capire, si prega di inviare ulteriori informazioni sull'attuale configurazione (cioè. Develoment ide, scenario di distribuzione, visitando URL, web.xml)

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

Non si vede una cartella denominata / assign1a sotto / WEB-INF / classes in guerra? E lo fa contiene un file chiamato RPCServlet.class? In caso contrario, è necessario compilare il servlet.

Inserisci il tuo web.xml e mostrare le voci <servlet> e <servlet-mapping>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top