Ne peut pas exécuter mon servlet de serveur tomcat, même si les classes sont dans le paquet
j'essaie d'obtenir mon servlet pour courir, j'ai été la recherche de 2 jours et essayer toutes les solutions possibles et pas de chance.
L'servet classe est dans le dossier approprié (j'.e sous le nom de paquet).
J'ai également ajouté les fichiers jar requis dans ma servlet dans le dossier lib.
l'web.xml fichier des cartes de l'url et définit la servlet.
Donc j'ai fait tout dans la documentation et wt gens dit ici et toujours cette erreur :
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.
Aussi voici mon code de la 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);
}
}
}
Merci de m'aider 🙂
Merci.
EDIT: voici le contenu de mon web.xml fichier
<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>
Vous devez vous connecter pour publier un commentaire.
J'ai remarqué la phrase
(wrong name: server/RPCServlet)
dans le message d'erreur.Cela signifie généralement que le fichier de classe a-en un autre nom que le nom de la structure de répertoire dans le jar/war.
Peut-être que vous avez initialement mis
RPCServlet.java
sous dir a nomméserver
et puis, plus tard déplacéRPCServlet.java
àassign1a
?Ou peut-être l'emballage d'origine défini comme:
Et puis vous avez changé plus tard pour
De toute façon, pour le résoudre, je vous suggère de supprimer tous les compilé des trucs (des fichiers de classe, la guerre des fichiers, etc). Arrêter tomcat, puis supprimer le
<TOMCAT_HOME>/work
répertoire juste pour être sûr que tout est parti.Ensuite, assurez-assurez-vous que RPCServlet.java est dans un dossier nommé
assign1a
et assurez-vous que le paquet est défini comme:Recompiler/reconstruction de la guerre et vous devez être dans un meilleur état. Peut-être essayez de construire la guerre dans Eclipse (ou Netbeans) parce que de cette façon il ne vous laisseront pas de les compiler dans un dossier qui ne correspond pas à la catégorie fichiers d'un nom de package.
Bonne Chance.
- Dave
package
déclaration. Le temps de réparer et de recompiler.votre erreur "noclassdeffound" signifie que tomcat ne pouvez pas trouver assign1a.RPCServlet quand il en a besoin. pour tomcat pour trouver la classe en question, il doit être sur tomcat, chemin de classe. le meilleur moyen de faire qu'il y aurait à assurez-vous que c'est dans les classes-dossier. cependant, la recherche de ce dossier peut-être un peu délicat D: il y a plusieurs possibilités, en fonction de ce système, vous êtes, comment vous êtes en développement, et comment vous déployez.
commencer par regarder sous votre installation de tomcat dossier, sous dossier nommé webapps. de là, trouver un dossier nommé [contexte] comme dans votre url http://localhost:8080/[contexte]/rpc. vous voyez? le dossier doit être nommé comme l'url que vous utilisez. (il serait plus facile de donner exacte de l'aide, si vous aviez fourni des informations exactes, c'est dificile sans connaître l'url que vous utilisez.) dans ce dossier, recherchez le dossier WEB-INF, et là, vous devriez trouver un dossier nommé classes. en vertu de ce dossier, vous devez avoir un dossier nommé assign1a, et là, vous devez avoir le fichier RPCServlet.class qui est le fichier compilé.
donc, en résumé court: [tomcat_install_folder]/webapps/[contexte]/WEB-INF/classes/assign1a/RPCServlet.class est manquant. oh, et les barres obliques sont bien sûr les barres obliques inversées sur windows 🙂
éclipse de projet web dynamique
aussi, si vous êtes en développement dans eclipse, et sont à l'aide d'un serveur tomcat depuis eclipse, puis votre dossier tomcat est en fait dans un tout autre endroit. ensuite, vous le trouver dans votre workspace eclipse dans le dossier .les métadonnées/.plugins/org.eclipse.wst.serveur.core/tmp0/wtpwebapps/[contexte] où tmp0 pourrait être tmp1 ou quelque chose d'autre, en fonction du nombre de serveurs tomcat vous avez commencé sous votre workspace eclipse.
si vous ne pouvez toujours pas comprendre, s'il vous plaît poster plus d'infos sur votre configuration (c'est à dire du développement de l'ide, scénario de déploiement, en visitant l'url, web.xml)
Voyez-vous un dossier nommé /assign1a dans /WEB-INF/classes dans votre GUERRE? Et elle contient un fichier nommé RPCServlet.class? Si non, vous devez compiler votre servlet.
Votre Post web.xml et de montrer votre
<servlet>
et<servlet-mapping>
entrées.