# Tomcat und Eclipse Problem



## webraccoon (8. Mai 2005)

Hallo Leute,

ich versuche mich gerade ein wenig in der Handhabung mit Eclipse und Tomcat.
Eclipse und Tomcat laufen soweit. Ein Plugin für für Tomcat ist in Eclipse eingebettet und dieser lässt sich von dort aus auch starten.

Nun möchte ich natürlich auch meine ersten Gehversuche machen und tippte die Standard-Beispielklasse "Hallo Welt" ab. Dafür habe ich ein neues Tomcat-Projekt namens Test angelegt im Workspace von Eclipse. Bis hier klappt auch alles wunderbar.

Nur, wie kann ich das Beispiel nun ausführen?
Wenn ich http://localhost:8080/test in den Browser eingebe, so erscheint lediglich die Dateistruktur unter /test. Gebe ich dahinter WEB-INF ein, so gibts einen 404er, obwohl dieses Verzeichnis von Eclipse angelegt wurde.

Was kann ich tun, hat jemand einen Rat für mich?

danke
webraccoon


----------



## Snape (8. Mai 2005)

Tach,
ich kenne Deine Dateistruktur nicht, aber du solltest die komplette Datei angeben, also mit .jsp Endung.


----------



## webraccoon (8. Mai 2005)

Hi,

ich versuche Servlets zu programmieren. Es gibt bisher nur .class und .java-Dateien.
Eclipse hat automatisch den Ordner WEB-INF angelegt. Dahinter befinden sich die erstellten Dateien. Aber dieser Ordenr ist unter localhost:8080/test nicht zu finden.

Die Frage, die sich mir spontan stellt, wo ist der Pfad bei Tomcat bekannt gemacht, damit offensichtlich hinter /test etwas ausgeführt wird?

webraccoon


----------



## Thomas Darimont (8. Mai 2005)

Hallo!

Da der Ordner Web-Inf ein "Spezieller"-Ordner der Web-Anwendung ist ist dieser nicht über die URL zugänglich.
Die Class-Dateien deiner Serlets liegen normalerweise im Verzeichnis WEB-INF/classes bzw. WEB-INF/lib (in Form eines jars.)
Um ein Servlet über den browser aufzurufen müsst du im Deployment Descriptor (web.xml) deiner Web-Anwenung ein
sognennates Servlet Mapping hinterlegen, dass dein Servlet mit einem URL Muster (Pattern) verbindet.
Erkennt nun der Servlet Container in der Request URL ein Pattern das auf ein bestimmtes Servlet passt wird dieses Servlet ausgeführt.

Beispiel:
Wir haben ein Tomcat-Projekt mit dem namen de.tutorials.tomcat erstellt und dieses als Tomcat-Project gekennzeichnet (Sysdeo Tomcat Plugin)
Weiterhin haben wir als Output-Folder für die Kompilierten Class Dateien das Verzeichnis WEB-INF/classes angegeben.

Unser Servlet:

```
package de.tutorials;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * @author Tom
 */
public class ExampleServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		out.println("www.tutorials.de");
	}
}
```

Unsere Web.xml:
Unterhalb von WEB-INF

```
<?xml version="1.0" encoding="ISO-8859-1"?>
<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">
	<display-name>tutorials.de example Servlet</display-name>
	<description>tutorials.de example Servlet</description>
	
	<servlet>
		<servlet-name>example</servlet-name>
		<servlet-class>de.tutorials.ExampleServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>example</servlet-name>
		<url-pattern>/example</url-pattern>
	</servlet-mapping>
</web-app>
```

Wollen wir nun unser Servlet aufrufen müssen wir (Beispielsweise) folgende URL im Browser eingeben:
http://localhost:8080/de.tutorials.tomcat/example
eingeben.

Wollen wir Parameter (per GET Methode) mitgeben könnten wir z.Bsp. folgendes Schreiben:
http://localhost:8080/de.tutorials.tomcat/example?parm1=foo&param2=bla


HTH,
Gruß Tom


----------



## webraccoon (8. Mai 2005)

Hi Tom,

web.xml? Diese Datei existiert nicht in meinem Workspace.
Muss ich diese selbst erstellen?
Du erwähntest auch etwas von einem output-folder. An solch eine Einstellung erinnere ich mich nicht. Wo kann ich das überprüfen? Habe das Gefühl, daß grundlegend etwas schiefgegangen ist. Das Plugin von sysdeo benutze ich ebenfalls.

gruss
webraccoon


----------



## webraccoon (8. Mai 2005)

so, habe es jetzt hingekriegt, daß die Datei zumindest ausgeführt wird. Allerdings musste ich dafür die .class und die .java -Dateien in den Tomcat Servlet Ordner kopieren.

Es muss doch aber möglich sein, entweder Tomcat mitzuteilen, daß er die Dateien aus dem Eclipse-Workspace nehmen soll, bzw. Eclipse, daß er die Dateien in den Tomcat-Servlet Ordner speichert und kompiliert.


?
webraccoon


----------



## Romsl (8. Mai 2005)

Hi,

wie Thomas das schon gesagt hat musst du in deinem WEB-INF Verzeichnis eine web.xml erstellen. Dies ist dein Deployment Descriptor, der die eingegebenen URLs auf das jeweilige Servelt mappen.


----------



## webraccoon (8. Mai 2005)

jo danke,

es funktioniert!

gruss
webraccoon


----------



## ingo preuss (19. Mai 2005)

Hi,

 habe ich das jetzt richtig verstanden, dass alle 3 Dateien, test.java, test.class und web.xml im Ordner WEB-INF liegen? Ist dein Servlet eine *.java- oder eine *.jsp-Datei?
 Wäre super, wenn jemand etwas Erklärendes zur generellen Verzeichnisstruktur bei beiden Servletarten sagen kann. Wo genau muss bitte was liegen. Wann nehme ich als Servlet eine *.java-Datei und wann eine *.jsp?

    Danke, Ingo


----------



## Thomas Darimont (19. Mai 2005)

Hallo!

Die Verzeichnisstruktur könnte "beispielsweise" so ausschauen:


```
myWebApp/
myWebApp/WEB-INF/web.xml
myWebApp/WEB-INF/classes/de/tutorials/ExampleServlet.class
myWebApp/WEB-INF/lib/someJdbcDriver.jar
myWebApp/index.jsp
```

Gruß Tom


----------



## ingo preuss (20. Mai 2005)

Hallo zusammen,
   @Tom Danke fuer deine kurez knappe Erklaerung. Mein erster jsp-Test wird im Browser angezeigt.

   Jetzt taucht ein Java-spezifisches Problem auf. Ich habe folgende Codezeile:

```
<html><body>
   Wir haben heute
  <%= new java.util.Date() %>.
  </body></html>
```
 
 Ich kriege zwar den Text ausgegeben. Nicht aber das Datum. Am Semikolon liegt es nicht. Obwohl dieses Bsp. so im Netz stand. Kann es sein, dass ich java.util.Date; einbinden muss?

   Gruß, Ingo


----------



## ingo preuss (20. Mai 2005)

Hab's eben gefunden. Der Fehlerteufel hat beim Gleichheitszeichen vor dem Datumsobjekt zugeschlagen.

 Gruß, Ingo


----------

