Problem mit Java Servlet und Tomcat 7 (in Eclipse Helios)

Naphaneal

unregistriert
Thread Starter
Dabei seit
05.12.2007
Beiträge
4.111
Reaktionspunkte
343
moin!

ich versuch die ganze zeit ein testservlet auf meiner lokalen installation von Tomcat 7.0.11 (eingebunden in Eclipse Helios) zum laufen zu kriegen.

leider kommt immer nur die meldung 404 oder HTTP Status 500 und dann

Code:
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 TimeDateServlet
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	java.lang.Thread.run(Thread.java:680)

root cause

java.lang.ClassNotFoundException: TimeDateServlet
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	java.lang.Thread.run(Thread.java:680)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.11 logs.

mein code sieht so aus:

Code:
package org.fhffm.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TimeDateServlet extends HttpServlet {
	
	
	public TimeDateServlet() {
		super();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		PrintWriter out = resp.getWriter();
		Date today = new Date();
		out.println("<html>" + "<body><h1>Today is</h1>");
		out.println("<b>"+ today +"</b></body>"+ "</html>");
	}
	
}

meine web.xml sieht so aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <servlet>
  	<servlet-name>TimeDate</servlet-name>
  	<servlet-class>TimeDateServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>TimeDate</servlet-name>
  	<url-pattern>/TutServlet/TimeDateServlet</url-pattern>
    </servlet-mapping>
  /*...standard-schmutz...*/
</web-app>


aufruf erfolgt über

Code:
http://localhost:8080/TutServlet/TutServlet/TimeDateServlet

ein logfile find ich nicht, zumindest nicht da wo es laut handbuch liegen soll... und laut einstellungsfenster in eclipse werden log-files nicht unterstützt

was mach ich falsch?

danke

greez

Naph
 
Zuletzt bearbeitet:
Laut Fehlermeldung wird die Klasse nicht gefunden, d.h. sie landet nicht im Publikationsziel (= im Klassenpfad der Webanwendung auf dem Tomcat). Mit Eclipse hab ich es nicht so, in Netbeans würde ich einen "Clean & Build" machen um sicherzustellen, dass alles an die richtige Stelle kommt.
Kontrollieren würde ich:
1) Baust du ein war? Dann pack es mal aus und schau rein. Deine Klasse sollte in WEB-INF/classes oder in WEB-INF/libs/dein.jar liegen
2) Funktioniert deine WebApp, wenn du sie manuell in einen Standalone Tomcat publizierst (war reinkopieren) ?

Edit: Mir kommt dein URL Pattern "doppelt gemoppelt" vor, versuch es mal so:
<url-pattern>/TimeDateServlet</url-pattern>
Und dann den Aufruf
http://localhost:8080/TutServlet/TimeDateServlet

(Deine WebApp heisst ja wohl TutServlet, dein war heisst TutServlet.war, oder?)

Edit 2: Deine Klasse liegt in einem Paket, da musst du natürlich in der web.xml schreiben:
<servlet-class>org.fhffm.servlet.TimeDateServlet</servlet-class>
Probier das zuerst!
 
Zuletzt bearbeitet:
einen standalone Tomcat hab ich nicht aufgesetzt


eine war file baue ich nicht, jedenfalls nicht bewusst. keine ahnung, ob der compiler da was macht...ich drück auf Run As und dann wähl ich den server aus...

das url-pattern hab ich geändert, aber da kommt das selbe bei raus.
 
Siehe meine 2te Änderung: Deine Klasse liegt in einem Paket, da musst du natürlich in der web.xml schreiben:
<servlet-class>org.fhffm.servlet.TimeDateServlet</servlet-class>
Probier das zuerst!
 
thx...werd's testen und rückmelden
 
nö...immernoch der selbe fehler...

allerdings hab ich in der konsole folgende fehlermeldung:

Code:
19.05.2011 19:00:07 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
19.05.2011 19:00:08 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TutServlet' did not find a matching property.
19.05.2011 19:00:08 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
19.05.2011 19:00:08 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
19.05.2011 19:00:08 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1230 ms
19.05.2011 19:00:08 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
19.05.2011 19:00:08 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.11
19.05.2011 19:00:08 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory host-manager
19.05.2011 19:00:08 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory manager
19.05.2011 19:00:09 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
19.05.2011 19:00:09 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
19.05.2011 19:00:09 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
19.05.2011 19:00:09 org.apache.catalina.startup.Catalina start
INFO: Server startup in 631 ms
19.05.2011 19:00:17 org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet TimeDate as unavailable
19.05.2011 19:00:17 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Allocate exception for servlet TimeDate
java.lang.ClassNotFoundException: org.fhffm.servlet.TimeDateServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:813)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
19.05.2011 19:01:24 org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet TimeDate is currently unavailable
19.05.2011 19:01:42 org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet TimeDate is currently unavailable
 
Weiß der Tomcat von dem Verzeichnis wo deine Klassen/JARs liegen?
 
sollte...die werden im ROOT angelegt...hoff ich jedenfalls...


will sagen, daß die im work ordner vom tomcat liegen...
 
hoffe deshalb, weil ich da nicht manuell eingreife...der vorgang wird von der IDE aus angestossen...

tja..im work ordner war ein ordner TutServlet und im ordner wtpwebapps is auch einer...aber die sind leer bis auf die META und WEB INF

im webapp is nur das standardzeug vom tomcat...
 
wtpwebapps ist kein Standard-Verzeichnis vom Tomcat. Da musst du schon im servlet.xml sagen wo die JARs liegen. Automatisch wird da wahrscheinlich nichts passieren. Der Ordner TutServlet gehört eigentlich in webapps.

work ist für Temporäre Dateien.
 
hmmm...ich find hier keine servlet.xml...oder meinst du die .xml für das von mir erstellte servlet?
 
Sorry, meinte conf/server.xml
 
hmm... da steht:

Code:
 [B]<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
[/B]
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." resolveHosts="false" suffix=".txt"/>

      [B]<Context docBase="TutServlet" path="/TutServlet" reloadable="true" source="org.eclipse.jst.jee.server:TutServlet"/></Host>[/B]
 
yo...also müssten das servlet beim drücken von Run As in diesem ordner liegen? tut's aber nicht...

aber inzwischen läuft das servlet...frag mich nicht wieso...

http://img24.imageshack.us/img24/6021/bild2ap.png

edit:

frage: könnte es daran gelegen haben, daß ich die temp files aus dem work und wtpwebapps ordner geschmissen hab?
 
Zuletzt bearbeitet:
zwei dringliche Tipps:

(1) Setze einen Standalone Tomcat auf und sieh zu das Eclipse da die Finger rausläßt! Eclipse biegt einige Verzeichnisse um und hinterher wieder zurück. Das ist nicht sehr verträglich wenn da mehrere Apps laufen auf dem Tomcat und es führt zu genau solchen absurden Fehlern

(2) Nim Ant und bau Dir die War-Dateien selbst. Dann weißt Du was wo steht! Vertrau nicht auf IDE-Automatismen.
 
werd ich wohl machen...

aber nicht mehr heute...

wenn ich tomcat standalone aufsetze, worauf muß ich achten?
zweite frage...

Apache Ant(TM) version 1.8.2 compiled on February 28 2011 <--aktuell genug?
 
Du mußt nichts tun. Tomcat laden, auspacken, Startscript starten, fertig!

Ant ist völlig unkritisch, auch 1.7 würde es tun.
 
edit: das war die eclipse version, die da noch lief...:hum:

brauch ich eigentlich den deployer, der auf der tomcat homepage angeboten wird?
 
Zuletzt bearbeitet:
Zurück
Oben Unten