Ich entwickle eine einfache Servlet-basierte Web-Anwendung. Ich verwende keine IDE. Im Folgenden sind die Schritte, denen ich gefolgt bin.Servlet Mapping und Bereitstellung in Tomcat
Ordnerstruktur:
myApp -> Enthält Ordner WEB-INF und index.html
WEB-INF enthält zwei Ordner und web.xml.
Pfad zu loginServlet.java: myApp \ WEB-INF \ classes \ servletclass \ loginServlet.java
WEB_INF enthält lib Ordner, conatins Servlet-api.jar
Index. html enthält ein Formular und das Aktionsattribut des Formulars enthält "login" als Wert.
myApp \ WEB-INF \ web.xml sieht aus wie folgt:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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"> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>loginServlet</servlet-name> <servlet-class>servletclass.loginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>loginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app>
die loginServlet.java Zusammengestellt Eingabeaufforderung. Es hat eine loginServlet.class-Datei erstellt.
Jetzt wurde eine WAR-Datei mit der Eingabeaufforderung erstellt und auf dem Tomcat-Server bereitgestellt.
Jetzt, wenn ich die Anwendung ausführen, lädt es index.html erfolgreich. Aber sobald Klick auf den Button Senden in Form zeigt es die folgende Fehlermeldung:
java.lang.NoClassDefFoundError: servletclass/loginServlet (wrong name: loginServlet) java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(Unknown Source) java.security.SecureClassLoader.defineClass(Unknown Source) org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2260) org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:803) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1244) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1109) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:456) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1452) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Unknown Source)
Haben Sie in Ihrer Servlet-Klasse eine Paketdeklaration? http://stackoverflow.com/questions/4621572/cant-run-my-servlet-from-tomcat-server-even-though-the-classes-are-in-package –