# ControllerServlet is not available



## Donar (25. Okt 2008)

Guten Abend ihr lieben,

noch immer arbeite ich an meinen kleinen Jdbc Projekt und die Probleme scheinen nicht nachzulassen. Zur Zeit versuche ich die Abfragen des ControllerServlets zu verarbeiten. 

Dazu ist hier der Ausschnitt aus der JSP:

```
<form action="ControllerServlet" method="get">
   <input type="hidden" name="doAction" value="nextPage">
   <input type="image" src="../img/nextPage.png" alt="nextPage" title="nextPage" width="40" height="40"  />
</form>
```

Und hier ein Ausschnitt aus dem Servlet:

```
public class ControllerServlet extends HttpServlet {
//...
public void doGet(HttpServletRequest request,  HttpServletResponse response) {
  try {
    //....
     else if (doAction.equals("nextPage")){
        controlParam = "nextPage";
        queryBean.getNextPage();
        url = "/web/jsp/nextPage.jsp";
   }
   //....
```

Wenn ich nun auf das Bild "nextPage" klicke ändert sich die Adresszeile von "../aktuelleSeite.jsp" in "../ControllerServlet?doAction=nextPage" . Was ja an sich in Ordnung ist nur werde ich nicht auf die Seite nextPage.jsp weitergeleitet. Folgende Fehlermeldung entsteht: "HTTP Status 404 - ControllerServlet. The requested resource (ControllerServlet) is not available".

Was habe ich falsch gemacht?


----------



## gex (25. Okt 2008)

Hallo

Das Problem gehört zwar eher in den Bereich Web-Tier...

Du must ja dein Servlet im Deployment Descriptor web.xml angeben.
Dort definierst du ja auch ein Servlet-Mapping (URL zu deinem Servlet).

Hast du da schon was, bitte sonst mal posten.

Gruss


----------



## Donar (26. Okt 2008)

Hallo und guten Morgen,

vielen Dank für die Antwort. An die web.xml hab ich gar nicht mehr gedacht. Folgende Zeilen vom ControllerServlet waren bereits vorhanden:

```
<servlet>
      <servlet-name>ControllerServlet</servlet-name>
      <description></description>
      <servlet-class>mokepi.cicerone.anwendung.ControllerServlet</servlet-class>
 </servlet>

<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/servlet/ControllerServlet</url-pattern>
</servlet-mapping>
```

Diese Zeilen habe ich jetzt nachträglich eingefügt:

```
<servlet>
    <servlet-name>nextPage</servlet-name>
    <display-name>nextPage</display-name>
    <jsp-file>
       /web/jsp/nextPage.jsp
    </jsp-file>
</servlet>

<servlet-mapping>
    <servlet-name>nextPage</servlet-name>
    <url-pattern>/web/jsp/nextPage.jsp</url-pattern>
</servlet-mapping>
```

Nachdem ich jetzt Tomcat neu gestartet habe und den Button im Browser getestet habe, wird immer noch die Fehlermeldung "HTTP Status 404.. Servlet is not available" ausgegeben.

Was muss ich noch beachten? (Ich habe erst vor einer Woche begonnen mich mit Jdbc ernsthaft zu beschäftigen und habe noch längst nicht alles gesehen. Daher kann es sein, dass ein einfacher Lösungsvorschlag Abhilfe verschaffen kann.)

PS: Auch ich habe gestern abend festgestellt, das ich den Thread in einer anderen Kategorie posten sollte, konnte ihn aber nicht mehr verschieben. Beim nächsten mal verspreche ich Besserung.   :wink:


----------



## gex (26. Okt 2008)

> Ich habe erst vor einer Woche begonnen mich mit Jdbc ernsthaft zu beschäftigen und habe noch längst nicht alles gesehen


-> Dein Problem hier hat aber mit JDBC noch nichts zu tun 

Für die JSPs benötigst du kein Eintrag in der web.xml.

Dein URL-Pattern ist ja bis anhin folgendes


> /servlet/ControllerServlet




```
<form action="ControllerServlet" method="get">
```

Die URL geht relativ von deiner JSP Datei aus, wenn du dein URL-Pattern des Servlets so belässt, dann
verwende mal das hier:

```
<form action="/servlet/ControllerServlet" method="get">
```

Gruss


----------



## maki (26. Okt 2008)

Was steht im Tomcat log?
Wenn du absolute URLs verwendest musst du den Context mitangeben.
Denke aber dass es ein Fehler imServlet ist.


----------



## gex (26. Okt 2008)

hmm ja stimmt, der context ist ja noch

dann wäre es das hier:

```
<form action="${request.contextPath}/servlet/ControllerServlet" method="get">
```

da du vermutlich die jsp nicht über die url /servlet/... aufrufst, hast du vermutlich mit absoluten
url am wenigsten probleme.


----------



## Donar (26. Okt 2008)

Hallo ihr beiden,

hier ist mein Tomcat log Bericht: [gelöscht].

Ich habe nun in der JSP zwei Codezeilen getestet: 

```
<form action="${request.contextPath}/servlet/ControllerServlet" method="get">
  <input type="hidden" name="doAction" value="nextPage">
  <input type="image" src="../img/nextPage.png" alt="nextPage" title="nextPage" width="40" height="40"  />
</form>
```
Adresszeile: http://localhost:8080/seitenTest/web/jsp/${request.contextPath}/servlet/ControllerServlet?doAction=nextPage
Fehler: The requested resource (/seitenTest/web/jsp/${request.contextPath}/servlet/ControllerServlet) is not available. (HTTP Status: 404)

und

```
<form action="/servlet/ControllerServlet" method="get">
  <input type="hidden" name="doAction" value="nextPage">
  <input type="image" src="../img/nextPage.png" alt="nextPage" title="nextPage" width="40" height="40"  />
</form>
```
Adresszeile: http://localhost:8080/servlet/ControllerServlet?doAction=nextPage
Fehler: The requested resource (/seitenTest/web/jsp/${request.contextPath}/servlet/ControllerServlet) is not available. (HTTP Status: 404)


Kann es sein, dass das Servlet gar nicht von Tomcat gestartet wird? Es wird nicht im Log aufgeführt.


----------



## gex (26. Okt 2008)

sorry mein Fehler, müsste wohl so sein:

```
${pageContext.request.contextPath}
```

Diese JSP-Expression müsste dann ausgewertet werden.


----------



## Donar (26. Okt 2008)

Hallo,

ich habe jetzt mehrere Schreibweisen ausprobiert. Weder:

```
${pageContext.request.contextPath}
```
noch

```
${pageContext.request.getContextPath}
```
oder

```
${pageContext.request.getContextPath()}
```
oder alle Varianten von

```
${request.contextPath}
```
werden ausgeführt. Die Fehlermeldung bleibt die gleiche. Liegt es vielleicht doch am Tomcat, der das Servlet nicht anzeigt (laut Log Bericht)?


----------



## gex (26. Okt 2008)

Wenn ein HttpCode 404 resultiert, dann wurde die Resource nicht gefunden.
Das heisst:
a.) Die URL stimmt nicht
b.) oder Das Servlet konnte nicht initialisiert werden (dann müsste das aber im Tomcat Log drin sein)

Kannst du mal dein WAR + Sourcen irgendwie zur Verfügung stellen?
Ich denke dann kann ich dir am besten helfen (sonst posten wir noch lange hin und her  ).

Gruss


----------



## Donar (26. Okt 2008)

Hey,

erstmal vielen Dank für Deine Geduld. 

Leider weiß ich nicht, was eine WAR - Datei ist. Ich gebe dir daher meinen Source zum anschauen. Vielleicht findest du etwas. Die jsp mit der ich arbeite heißt "web/jsp/gerichte.jsp". Der Button der angeklickt werden soll heißt impressum und dieser Source befindet sich in der Datei "web/jsp/seitenfuss.jsp". 

Der Source des Servlets befindet sich im Verzeichnis "src\servlets\mokepi\cicerone\application". Der Ort der web.xml sollte bekannt sein. 

Bitte beachte nicht das Design, da es noch nicht fertig gestellt ist. 

Und nun der Link: [gelöscht]


----------



## maki (26. Okt 2008)

Geht das?


```
<form action="/<%=request.getContext()%>/servlet/ControllerServlet" method="get">
```


----------



## Donar (26. Okt 2008)

Nicht ganz. Aber das funktioniert:

```
<form action="<%=request.getContext()%>/servlet/ControllerServlet" method="get">
```

Super Sache! Jetzt muss ich nur noch die Pfade der Bilder und der css Datei abändern. Vielen vielen Dank.


----------



## maki (26. Okt 2008)

Warum du mappings zu deinen CSS, JS, JSP und sonstigen Dateien abgelegt hast ist mir schleierhaft... 

Solltest dich mehr in Servlets einlesen, so als gut gemeinter Rat.


----------



## gex (26. Okt 2008)

Hi Donar

Anmerkung:
Deine WebApp ist auf Version 2.3 (im web.xml definiert).

Verwendest du 2.4 solltest du auch die EL verwenden können:

```
${pageContext.request.contextPath}
```

Ist wesentlich schöner als Scriptlets.

Dem Rat von maki, dich besser in Servlets einzulesen, kann ich nur beipflichten, besser gesagt,
allgmein Web-Tier, vielleicht mal ins Tut von Sun schauen:
http://java.sun.com/javaee/5/docs/tutorial/doc/bnadp.html


----------



## Donar (26. Okt 2008)

Dann werde ich euren Rat folgen und mich erstmal einlesen. Vielen Dank nochmal


----------

