Ich habe Probleme mit meine erste servlet
Dies ist der code zu meinem servlet...
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
private String message;
public void init(){
message="Hello World";
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>"+message+"</h1>");
}
public void destroy(){
}
}
Bin ich mit xampp ist tomcat 7
- und das ist meine web.xml Datei
<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>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
Meine web.xml im %TOMCAT_HOME%/webapps/ROOT/Verzeichnis WEB_INF
und meine HelloWorld.class im %TOMCAT_HOME%/webapps/ROOT/WEB_INF/classes-Verzeichnis.
wenn ich versuche meine Datei von meinem browser, die ich geben
http://localhost:8080/HelloWorld
in der addressbar
und die folgenden Servlet-Ausnahme zeigt sich
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 HelloWorld
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:724)
root cause
java.lang.NoClassDefFoundError: HelloWorld (wrong name: com/HelloWorld/HelloWorld)
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:752)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:724)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.21 logs.
Bitte eine Methode vorschlagen, um mein app richtig...
- es scheint, dass Sie vergaß hinzuzufügen, die ServletException
- Die SErvletException?
- Es war eine große Seite mit einer Menge von Fehler, irgendwie war ich nicht in der Lage, es hier zu posten.Stack Overflow halten würde, gibt Fehler der Einrückung auch wenn ich kümmerte sich um Sie.
- eine Sache zu tun während der Entsendung-code, fügen Sie ihn in den Textbereich, und wählen Sie dann den gesamten code und drücken Sie
ctrl + k
- hier gehen Sie dies ist der servlet-exception
- hat deine Klasse eine Paket-oder haben Sie es in einem Verzeichnis namens com/HelloWorld/
- sieht aus wie Ihre Klasse definiert ist, in einem Paket namens
com/HelloWorld
, ist es eine package-definition am Anfang der java-Datei - "Ich habe Probleme mit mein erstes servlet" muss in die form einer Frage zu Folgen, die gewaltige Q&A-format.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie nicht den Standardwert (leer) - Paket; geben Sie einen Namen statt...
Update web.xml zu reflektieren, neues Paket...
Stellen Sie sicher, dass die servlet-class-Datei befindet sich in...
http://localhost:8080/HelloWorld
sollte immer noch funktionieren.com/HelloWorld/HelloWorld
aus; Sie haben HelloWorld definiert, die in einer JAR-Datei im classpath, aber vergaß es? Wenn TC immer noch Beschwerden mit dem gleichen Fehler, ändern Sie die obige Paket Namen zucom.HelloWorld
(und servlet-mapping), dann erneut testen.@WebServlet("/HelloWorld")' instead of web.xml, like @Prasad mentioned, deployed to TC folder
/webapps/webso/WEB-INF, don't use
ROOT", versuchen Sie es erneut.import javax.servlet.annotation.WebServlet;
für die Anmerkung.befolgen Sie die folgenden Schritte
HelloWorld
Standard-Pakete sind entmutigt, immer Ihre servlets und Klassen in einem Paket. Können sagen, Sie haben Paket
com.practice
undHelloWorld
servlet dann Ihreweb.xml
wirdWenn Sie bei der Definition servlet in
com.practice
- Paket, d.h. der Pfad sollteWEB-INF/classes/com/practice/HelloWorld
Auch, wenn Sie mit tomcat 7, dann müssen Sie nicht haben, um zu verwenden servlet-mapping in web.xml an alle.
Sie können einfach mit Anmerkungen für die gleichen.
z.B.
Hier
WebServlet
ist die Anmerkung, dass ist equalivalent zu definieren servlet inweb.xml
und"/HelloWorld"
ist das url-Musterright click
auf Projekt wählen Sieproperties
klicken Sie dann aufproject facets
. Dort können Sie sehen, servlet-versionich weiß nicht, warum Sie nur die Eingabe der servlet-mapping url zum aufrufen Ihrer web-Anwendung wie folgt.
http://localhost:8080/HelloWorld
sollte es in dem folgenden format
http://localhost:8080/your-web-application-name/url-pattern
angenommen, zum Beispiel, werden Sie den Aufruf HelloWorld url-mapping auf der Web-Applikation mit dem Namen MyWebApp . es sollte aufgerufen werden, wie unten beschrieben.
host:port/MyWebApp/HelloWorld
Ich auch vor dem gleichen Problem. Ich löste das Problem wie folgt.
IDE Eclipse Photon
Gehen Sie zu diesem Pfad:
Build Path> Configure Build Path > Quelle
Ändern Sie den Pfad "Default output folder":
[project name]/WebContent/WEB-INF/classes
Mit dieser versuchen, Irgendwann funktioniert es nicht.
Wenn es nicht funktioniert, erstellen Sie ein neues Java-Programm
Public static void main(String[] args)
und Führen Sie das Projekt als Java-Anwendung, damit Ihr Projekt wird aktualisiert, und eine neue .class-Datei erstellt werden: