# Tomcat 5.0 & Servlets & Eclipse (Wie verbinden?)



## Markus Kahl (29. Jun 2004)

Hallo Leute,

ich möchte ein Servlet erstellen.
(Wer heute Abend keine Lust zum Nachdenken hat, jedoch mit dem Sysdeo Plugin+Tomcat+Eclipse arbeitet, möge bitte eine kurze anonyme Antwort erstellen und mich aufmuntern das diese Komponenten überhaupt zusammen funktionieren...)

Konfiguration:
Tomcat 5.0 ist installiert. Die Beispiel Servlets kann ich mir im Browser ansehen.
Als Beispiel Servlet nehme ich das HelloWoldExample und ändere nur den Text.
Eclipse ist mit dem Sysdeo Plugin (tomcatPluginV3alpha1) installiert. Im Plugin habe ich den Pfad zum Tomcat und die Version angegeben. (Was muß ich bei Base eintragen? Was für andere Einstellungen noch?) Das erstellte Projekt hat bei "Projekte zum Tomcat Path hinzufügen" ein Häkchen.

Das Projekt heißt "abcTest", das Package heißt "pack", die Klasse heißt "abcHello"
Wenn ich aber diese Adresse eingebe:
http://localhost:8081/abcTest/pack/abcHello

Erscheint immer nur das das Servlet nicht gefunden wurde. Was mache ich falsch?
"Kontext in Server.xml aktualisieren" in den Projekteigenschaften habe ich auch vorgenommen.
Wenn ich das Servlet manuell in das Verzeichnis mit den anderen BSP Servlet Dateien kopiere und den Pfad vom HelloWorldExample auf den neuen Namen abändere sagt er mir genauso das er das Servlet nicht gefunden hat.


Viele Grüße

Markus

PS: Wenn Ihr ein Tutorial habt das sich auf die obige Konfiguration bezieht... nur her damit.  Ein Tut für Tomcat 4.0, Eclipse 2.0, Sysdeo habe ich bereits gefunden. Bin so weit es geht wie dort beschrieben vorgegangen und bin zu obigen Problem gekommen...


----------



## Jaraz (29. Jun 2004)

Hi,

kleines Tutorial:

Eclipse starten:
file->new->project
tomcat project
Projektname test, Rest lassen.
in WEB-INF/src new package test erstellen
im Package Class TestServlet erstellen:

```
package test;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet{

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.write("Hallo Welt");
        out.close();
    }
}
```

minimal server.xml, alte sichern:

```
<Server port="8005" shutdown="SHUTDOWN">
	<Service name="Catalina">
		<Connector port="8088" />
		<Engine name="Catalina" defaultHost="localhost">
			<Host name="localhost" debug="0" appBase="C:/irgendwo" unpackWARs="true" 
				autoDeploy="true">
				<Context path="/test" reloadable="true" docBase="C:\Programme\eclipse\workspace\test" />
			</Host>
		</Engine>
	</Service>
</Server>
```

minimal web.xml in WEB-INF Ordner erstellen

```
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>Blank Application</display-name>
  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>test.TestServlet</servlet-class>    
  </servlet>

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
  </servlet-mapping>
</web-app>
```

Tomcat über plugin starten, http://localhost:8088/test/TestServlet aufrufen, fertig!

Gruss Jaraz


----------



## Markus (29. Jun 2004)

Hallo Jarez,

erstmal vielen Dank für die ausführliche Hilfe
Leider findet er das Servlet immer noch nicht. Ich habe es exakt so gemacht wie Du geschrieben hast. Fehlermeldung: "description The requested resource (/test/TestServlet) is not available."
In der server.xml schreibst Du "appBase="C:/irgendwo". Wo muß der Pfad hinzeigen. Trage ich dort webapps wie im Original ein funktioniert es auch nicht. Der Eclipse Pfad stimmt auch.

Was muß ich noch tun?


Viele Grüße

Markus


----------



## Dante (29. Jun 2004)

Den Deployment-Descriptor (web.xml) für dein Servlet anpassen. Ganz ohne nachdenken wirds nicht gehen


----------



## Markus Kahl (29. Jun 2004)

Wieso, ist doch alles richtig?


----------



## Markus Kahl (3. Jul 2004)

Ich habe ebend Eclipse 2.0 und Tomcat 4.1 installiert.  Bin die Schritte jetzt durchgegangen und bekomme jetzt im Browser eine Fehlermeldung das die Klasse kein Servlet sei...
Die Meldung:


javax.servlet.ServletException: Class test.TestServlet is not a Servlet
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:907)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:668)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
	at java.lang.Thread.run(Thread.java:536)

root cause

java.lang.ClassCastException: test.TestServlet
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:903)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:668)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
	at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
	at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
	at java.lang.Thread.run(Thread.java:536)


----------



## Markus Kahl (3. Jul 2004)

Das Servlet ist vermutlich nicht Schuld. Ist bei mir noch etwas nicht konfiguriert?


----------



## Markus Kahl (3. Jul 2004)

Habt Ihr keine Idee? Das da oben ist die Fehlermeldung im Browser. Das Servlet habe ich genauso erstellt wie oben vorgeschlagen. Wenn ich zu doof bin dann sagt es mir bitte...


----------



## Guest (5. Jul 2004)

Bu musste noch die web.xml im gleichen verzeichnis erstellen, wo der Ordner class liegt.
Dieser dieht zum URL mapping, sodass du nicht immer die ganze URL eingeben musst.

Versuche es mal, orientier dich dabei an den Servlets die als Bsp. bei Tomcat dabei sind


```
<web-app>

	<!--
              Name (arbitrary) and implementation class of the servlet 
          -->

	<servlet>
           <servlet-name>SampleServlet</servlet-name>
               <servlet-class>ort.zu deinem.servlet</servlet-class>
        </servlet>

	<!--
          The URL part (after localhost:8080/SampleServlet) that will result in
         a call to our servlet 
         -->

	<servlet-mapping>
          <servlet-name>SampleServlet</servlet-name>
            <url-pattern>/sample</url-pattern>
           </servlet-mapping>
</web-app>
```


----------



## Markus Kahl (18. Jul 2004)

Ich habe das mit den Servlets jetzt hingekriegt. Hier ist eine einfache Anleitung:
http://www.keyboardsamurais.de/mt/archives/000050.html

Sie bezieht sich auf Eclipse 2/3, Tomcat 4/5 und dem Sysdeo Plugin.


Viele Grüße

Markus


----------

