web-dev-qa-db-de.com

HTTP Status 500 Fehler beim Instanziieren der Servlet-Klasse

Ich schreibe eine Webanwendung und stelle sie im Apache Tomcat-Webcontainer bereit. Ich folge einem einfachen Tutorial von http://cse.csusb.edu/turner/Java_web_programming/servlets/

und dann diesen Fehler bekommen. Ich füge Ausschnitte aus und web.xml, website.xml bzw. meine Codedateien ein.

Struktur:

enter image description here

web.xml:

<?xml version="1.0"?>
<web-app
     xmlns="http://Java.Sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://Java.Sun.com/xml/ns/j2ee 
        http://Java.Sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
   <servlet>
      <servlet-name>home</servlet-name>
      <servlet-class>website.web.HomeServlet</servlet-class>
   </servlet>
   <servlet-mapping>
      <servlet-name>home</servlet-name>
      <url-pattern>/home</url-pattern>
   </servlet-mapping>
</web-app>

HomeServlet.Java

paket website.web;

import Java.io.IOException;
import Java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HomeServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
               throws ServletException, IOException {
                  PrintWriter writer = resp.getWriter();
                  writer.println("<h1>Hello, World!</h1>");
               }        
}

Error:

HTTP Status 500 - Error instantiating servlet class website.web.HomeServlet

type Exception report

message Error instantiating servlet class website.web.HomeServlet

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

exception

javax.servlet.ServletException: Error instantiating servlet class website.web.HomeServlet
    org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
    org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
    org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:610)
    org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:518)
    org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1091)
    org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:668)
    org.Apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.Java:223)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1517)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1474)
    Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    Java.lang.Thread.run(Thread.Java:745)
root cause

Java.lang.ClassNotFoundException: website.web.HomeServlet
    org.Apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.Java:1305)
    org.Apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.Java:1157)
    org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
    org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:79)
    org.Apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.Java:610)
    org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:518)
    org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1091)
    org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:668)
    org.Apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.Java:223)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1517)
    org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1474)
    Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    Java.lang.Thread.run(Thread.Java:745)
3
jssmkp

Ich finde etwas falsch in diesem Abschnitt:

<servlet-class>website.web.HomeServlet</servlet-class>

Versuchen Sie stattdessen:

<servlet-class>website.HomeServlet</servlet-class>
4
Oleg Baranenko

Zunächst wird in Ihrer web.xml TestServlet als Klassenname für Ihren Server angegeben, im Gegensatz zu HomeServlet. 

Zweitens scheint es, dass Ihre HomeServlet-Klasse zwar im Paket website.web enthalten ist, sich jedoch physisch in einem Ordner namens website befindet, nicht website/web. Ich wäre überrascht zu sehen, dass dies sogar richtig kompiliert wurde?

0
JHH