# web.xml bei Eclipse JSP-Webanwendung



## Erando (20. Okt 2011)

Hallo,
ich arbeite mich gerade in JSP und Servlets ein. Ein Servlet muss ja von Tomcat deployt werden, soweit ich weiß ist dafür die web.xml Datei wichtig. Als ich in Eclipse aber mein dynamisches Web-Projekt erstellt habe, hab ich vergessen das Häkchen bei "Generate web.xml deployment descriptor" zu setzen. Folglich hatte ich keine generierte xml-Datei. Gut, dachte ich, erstellst du sie halt neu unter WEB-INF/lib. Das funktioniert aber leider nicht, kriege beim Ausführen meines Servlets eine 404 von Tomcat. Hier die Details:

Servlet *ServletHalloWelt.java*:

```
package jsplernen;

import java.io.PrintWriter;

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

public class ServletHalloWelt extends HttpServlet {

	String msgString = "init";

	public ServletHalloWelt() {
		super();
	}

	public void init() throws ServletException {
		msgString = "Von einem Servlet: hello world";
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, java.io.IOException {
		resp.setContentType("text/html;charset=ISO-8859-1");
		PrintWriter outWriter = resp.getWriter();
		outWriter.print("<html>" + "<head>"
				+ "<title>Servlet Hello Wordl</title>" + "</head>" + "<body>"
				+ "<h3>" + msgString + "</h3>" + "<p>" + req.toString()
				+ "</p>" + "</body>" + "</html>");

	}

}
```

*web.xml*:
[XML]<?xml version="1.0" encoding="ISO-8859-1"?>
<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>SampleHalloWelt</servlet-name>
 	<servlet-class>
 		jsplernen.ServletHalloWelt
  	</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>SampleHalloWelt</servlet-name>
  	<url-pattern>/WissmannBuch</url-pattern>
  </servlet-mapping>
</web-app>[/XML]

unter
http://localhost:8080/WissmannBuch/servlet/jsplernen.ServletHalloWelt und
http://localhost:8080/WissmannBuch/ServletHalloWelt

gibt Tomcat aus:

HTTP Status 404 - /WissmannBuch/servlet/jsplernen.ServletHalloWelt

--------------------------------------------------------------------------------

type Status report

message /WissmannBuch/servlet/jsplernen.ServletHalloWelt

description The requested resource (/WissmannBuch/servlet/jsplernen.ServletHalloWelt) is not available.


--------------------------------------------------------------------------------

Apache Tomcat/7.0.22


Nehme Tomcat 7.0.22 und

Eclipse Java EE IDE for Web Developers.

Version: 1.3.2.20110218-0812
Build id: 20110218-0911

Wie kriege ich jetzt mein Servlet zum Laufen?
*Bin für jede Hilfe dankbar!*


----------



## nillehammer (20. Okt 2011)

Die URL zu einem Servlet besteht aus 5 Sachen:
- Protokoll (http:// oder https://), ist ok
- Host (z.B. localhost), ist ok
- Der TCP-Port (Standardmäßig läuft Tomcat auf 8080), also wohl auch ok
- Der Context, das ist Servlet-Sprech für die Webanwendung. Es gibt einen speziellen Context "ROOT", bei dem nichts steht. Ansonsten muss hier der Name Deiner Webanwendung stehen.
- Die Resource, also entweder der Name einer JSP-Datei oder die *gemappte* Url eines Servlets.

Die komplette URL müsste dann so aussehen:
- Wenn Deine Webanwendung/Context einen Namen hat:
http://localhost:8080/<Name_Deiner_Webanwendung>/WissmannBuch
- Wenn Du im ROOT-Context entwickelst:
http:// localhost:8080/WissmannBuch (habe mit Absicht ein Leerzeichen eingebaut, damit es vom Forum nicht als URL interpretiert wird!)


----------



## Erando (21. Okt 2011)

ich habe mal 2 Sachen geändert:

*web.xml:*
[XML=11]<url-pattern>/HalloWelt</url-pattern>[/XML]

(nur den Namen, war sinnfrei weil mein Projekt bereits WissmannBuch heißt.)

*ServletHalloWelt.java*
[JAVA=11]@WebServlet({ "/HalloWelt"})
public class ServletHalloWelt extends HttpServlet {[/code]

Mit der 11.Zeile ist die URL im Eclipse Browser "http:// localhost:8080/WissmannBuch/HalloWelt" und nicht mehr "http:// localhost:8080/WissmannBuch/servlet/jsplernen.ServletHalloWelt" So ist sie ja auch gemappt. Aber ich kriege noch immer den http 404 Error von Tomcat.
Die Ordnerstruktur meines Web-Projekts ist übrigens (standardmäßig von Eclipse bei Erstellung eines dynamschen Webprojekts):


[XML]WissmannBuch
├───src
│   └───jsplernen
│       └───ServletHalloWelt.java
├───WebContent
│   └───WEB-INF
│       └───lib
│          └───web.xml[/XML]

*Edit:*
Ich hab das mal debuggt und da hat es funktioniert?! Auch ein Run nach dem Debuggen funktioniert plötzlich? Ich verstehs zwar nicht, aber wenigstens scheint doch alles richtig zu sein...


----------

