ControllerServlet is not available

Status
Nicht offen für weitere Antworten.

Donar

Mitglied
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:
Code:
<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:
Code:
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

Bekanntes Mitglied
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

Mitglied
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:
Code:
<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:
Code:
<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

Bekanntes Mitglied
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

Code:
<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:
Code:
<form action="/servlet/ControllerServlet" method="get">

Gruss
 
M

maki

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

gex

Bekanntes Mitglied
hmm ja stimmt, der context ist ja noch

dann wäre es das hier:
Code:
<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

Mitglied
Hallo ihr beiden,

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

Ich habe nun in der JSP zwei Codezeilen getestet:
Code:
<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
Code:
<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

Bekanntes Mitglied
sorry mein Fehler, müsste wohl so sein:
Code:
${pageContext.request.contextPath}

Diese JSP-Expression müsste dann ausgewertet werden.
 

Donar

Mitglied
Hallo,

ich habe jetzt mehrere Schreibweisen ausprobiert. Weder:
Code:
${pageContext.request.contextPath}
noch
Code:
${pageContext.request.getContextPath}
oder
Code:
${pageContext.request.getContextPath()}
oder alle Varianten von
Code:
${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

Bekanntes Mitglied
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

Mitglied
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]
 
M

maki

Gast
Geht das?

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

Donar

Mitglied
Nicht ganz. Aber das funktioniert:
Code:
<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. :D
 
M

maki

Gast
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

Bekanntes Mitglied
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:
Code:
${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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben