Apache Tomcat Installation/Konfiguration arbeitet nicht einwandfrei

Harald99

Mitglied
Hallo und schönen guten Morgen!

Ich habe ganz frisch das JDK 16 und den Tomcat 10 installiert. Die Tomcat Startseite wird problemlos angezeigt und auch beim Aufruf der Beispiele gibt es keine Probleme.

Ich habe dann die "sample.war" als Beispielvorlage von Tomcat installiert. Das JSP hiervon arbeitet auch korrekt - das Servlet liefert jedoch die folgende Fehlermeldung:

HTTP Status 500 – Internal Server Error​


Type Exception Report

Message Error instantiating servlet class [mypackage.Hello]

Beschreibung The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

jakarta.servlet.ServletException: Error instantiating servlet class [mypackage.Hello]
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1699)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)

Root Cause

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2516)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:872)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1408)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1699)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)

Root Cause

java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1444)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252)
java.base/java.lang.ClassLoader.defineClass1(Native Method)
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2516)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:872)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1408)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1699)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)

Hinweis Der komplette Stacktrace der Ursache ist in den Server logs zu finden


Apache Tomcat/10.0.10​


Nach meiner Interpretation der Fehlermeldung hat Tomcat keinen Zugriff auf die servlet-api.jar - Bibliothek in der sich die Definition des HttpServlets befindet.

Hinweis: die System-/Umgebungsvariablen sind entsprechend gesetzt und beinhalten auch eine Definition für diese Jar-Bibliothek.

Das Interessante: wird das Servlet erneut aufgerufen, erscheint eine andere Fehlermeldung:

HTTP Status 404 – nicht gefunden​


Type Status Report

Beschreibung The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.


Apache Tomcat/10.0.10​


Wer weiß was hier nicht korrekt läuft und kann mir helfen? Danke!

P.S.: Falls benötigt kann ich gerne auch noch die Defintion der System-/Umgebungsvariablen hier einfügen.
 
Danke für den Hinweis - ich habe das fertig heruntergeladen und genau so verwendet, wie es ist - als WAR sollte es ja laufen ...
Nein, das ist so nicht ganz richtig. Die Abhängigkeiten müssen natürlich auch erfüllt sein. Tomcat ist halt in erster Linie ein "lightwight Servlet Container".

Aber das Problem ist hier anscheinend ein anderes, einfaches:
Du nutzt ein aktuellen Tomcat, der mit der aktuellen Jakarta EE daher kommt. Das heruntergeladene WAR benötigt aber ein Java EE.

Der Namespace hat sich geändert - im Java EE ist der Namespace javax.servlet.http und in Jakarta EE ist dies jakarta.servlet.http.

Dies kannst Du auch jederzeit selbst prüfen - im Tomcat Verzeichnis einfach die Datei lib/servlet-api.jar betrachten - da findest Du dann z.B.
jakarta/servlet/http/HttpServlet.class

Das Ergebnis ist daher bei Dir: die Klasse javax.servlet.http.HttpServlet wurde nicht gefunden.
 
Und als Ergänzung dann noch die Erläuterung, worauf Du achten solltest:

Wenn Du eine Software ausführen willst, dann solltest Du schauen, welchen Standard diese Software nutzt / was die Voraussetzung ist.

Dann kann man den passenden Tomcat herunter laden. So findet sich auf http://tomcat.apache.org/:
The Apache Tomcat Project is proud to announce the release of version 8.5.71 of Apache Tomcat. This release implements specifications that are part of the Java EE 7 platform.
The Apache Tomcat Project is proud to announce the release of version 9.0.53 of Apache Tomcat. This release implements specifications that are part of the Java EE 8 platform
The Apache Tomcat Project is proud to announce the release of version 10.0.11 of Apache Tomcat. This release implements specifications that are part of the Jakarta EE 9 platform.
 
Und als Ergänzung dann noch die Erläuterung, worauf Du achten solltest:

Wenn Du eine Software ausführen willst, dann solltest Du schauen, welchen Standard diese Software nutzt / was die Voraussetzung ist.

Dann kann man den passenden Tomcat herunter laden. So findet sich auf http://tomcat.apache.org/:

ich hab es am laufen !

ich habe die "import javax.servlet" etc durch die entsprechenden "jakarta. ..." ausgetauscht übersetzt und schon funktioniert es.

@kneitzel: herzlichen Dank für die Unterstützung !!! Ohne deine Hinweise hätte ich es wohl nicht hinbekommen!
 

Zurück
Oben