web.xml / Erreichbarkeit von Servlets

javaner08

Aktives Mitglied
Hallo,

es geht um ein kleines Übungsprojekt.

folgende (Standard-)Verzeichnisstruktur :

web
|
|
L_views
|
|
L_Web-Inf
| |
| |
| L_web.xml
|
|
L_c1.htm
|
L_ind.htm

"ind.htm" habe ich in der web.xml unter "welcome-pages" als Start-Seite eingetragen und in ind.htm gibt es einen
Link auf c1.htm

In der web.xml habe ich nun folgendes Servlet eingetragen :

<servlet>
<servlet-name>C1Servlet</servlet-name>
<servlet-class>testCh01.C1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>C1Servlet</servlet-name>
<url-pattern>/C1Servlet</url-pattern>
</servlet-mapping>

und dieses C1Servlet wird in c1.htm mit folgender Zeile angesprochen :
<form action="C1Servlet" method="Post" >

OK, funktioniert auch soweit, wenn ich in dem Formular in c1.htm auf "Submit" klicke, dann wird das JAVA-Servlet
"C1Servlet" ausgeführt.
Aber... : Wenn ich die c1.htm in ein Unterverzeichnis ("views") unterhalb des web-Verzeichnises verschiebe (und dabei natürlich den Link in ind.htm auf c1.htm auf views/c1.htm anpasse), dann wird das C1Servlet nicht gefunden. HTTP-Status 404, requested source not available.

WO muß ich WAS ändern, damit die Sache auch dann funktioniert, wenn c1.htm nicht im web-Verzeichnis liegt sondern in einem Unterverzeichnis von web ?
Geht das irgendwie über die Servlet-Einträge in der web.xml, oder muß ich den action-Eintrag im Formular ändern oder was muß ich machen ?

Das ganze ist als eclipse-Projekt eingerichtet und die "gebuildeten" Java-Klassen befinden sich unter "WEB-INF\classes"
 
Zuletzt bearbeitet:

hexx

Mitglied
und dieses C1Servlet wird in c1.htm mit folgender Zeile angesprochen :
<form action="C1Servlet" method="Post" >

Mit
Code:
action="C1Servlet"
gibst du einen relativen Pfad an. Die aufgerufene URL ist also
Code:
http://host/views/C1Servlet
Du musst also entweder eine absolute URL angeben
Code:
action="/C1Servlet"
oder das Servletmapping in der web.xml anpassen.
 

mvitz

Top Contributor
Und um direkt einen Folgefehler zu vermeiden:
/C1Servlet ist falsch, da Java Webapps einen Kontextnamen (häufig = Name der WAR Datei) haben und eher sellten im Rootcontext laufen.

Aus dem Grund solltest du lieber /<context>/C1Servlet als Action setzen. Um den <context> nicht hartcodieren zu müssen, gibt es in der JSTL den Tag <c:url>.
 

javaner08

Aktives Mitglied
Hallo,

danke erstmal für die Antworten.

Die java-Classes befinden sich - wie schon oben gesagt- unter WEB-INF/classes.

Wenn sich c1.htm direkt unter web befindet, funktioniert alles.
Befindet sich c1.htm unter views (siehe Verzeichnis-Struktur weiter oben), dann funktioniert es eben nicht.

Also in welcher Weise sollte ich da das Servlet-Mapping anpassen ?
Sollte ich unter <servlet-class>testCh01.C1Servlet</servlet-class> noch etwas hinzufügen ? Ich dachte, es reicht aus, wenn der Pfad zu den classes im build-path angegeben ist...

und unter "action=C1Servlet" wird doch eher das angegeben, was unter <servlet-name>C1Servlet</servlet-name>
angegeben wird und kein kompletter Pfad, oder ?
 

hexx

Mitglied
Code:
action="C1Servlet"
ist eine relative Pfadangabe (SELFHTML: HTML/XHTML / Allgemeine Regeln für HTML / Referenzieren in HTML). Der Browser vervollständigt die Pfadangabe dann automatisch: Bei
Code:
/c1.htm
kommt
Code:
/C1Servlet
dabei heraus, bei
Code:
/views/c1.htm
wird daraus
Code:
/views/C1Servlet
. Wenn du das so haben willst, musst du halt das Servletmapping anpassen:

Code:
<servlet-mapping>
  <servlet-name>C1Servlet</servlet-name>
  <url-pattern>/views/C1Servlet</url-pattern>
</servlet-mapping>

oder den relativen Pfad anpassen:

Code:
action="../C1Servlet"

oder halt eine absolute Pfadangabe benutzen:

Code:
action="/C1Servlet"

Der Ort der Klassendateien hat damit nichts zu tun.

Und beachte das, was mvitz zum Kontextpfad geschrieben hat. Das hatte ich in meinem ersten Post vergessen.
 

javaner08

Aktives Mitglied
Hallo,

vielen Dank, dass Ihr Euch die Zeit genommen habt, hier Eure Antworten zu posten.

Ich hab's jetzt folgendermaßen hingekriegt :

In views/c1.htm steht jetzt :

<form action="../C1Servlet" method="Post" >



Und in der web.xml steht nach wie vor :

<servlet-mapping>
<servlet-name>C1Servlet</servlet-name>
<url-pattern>/C1Servlet</url-pattern>
</servlet-mapping>


... und funktioniert. Das entsprechende servlet wird gefunden.

Aber davon abgesehen schaue ich mir gleich trotzdem nochmal Eure Links bzgl. der relativen Pfade usw.. an.
Vielen Dank.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Erreichbarkeit des ServletContextes Web Tier 15
T Model2-Architektur Servlets Web Tier 0
D Servlet EJBs in Servlets verwenden? Web Tier 4
S JSF, JSP, Servlets - ich verstehe nur noch Bahnhof Web Tier 4
M Best practice JSP und Servlets Web Tier 1
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
T Einsteigerfragen zu Servlets/Webprogrammierung mit Java Web Tier 11
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
U Servlet Allgemeine Frage zu Servlets Web Tier 2
T Tomcat mit Servlets Problem Web Tier 7
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
R Daten Streamen mit Servlets. Web Tier 4
F Richtiges Session Management mit Servlets Web Tier 4
S Architektur-Problem? 2 Servlets, ein Objekt Web Tier 4
S Ein ControllerServlet für andere Servlets - Sinnvoll oder nicht? Web Tier 34
D Servlets vor direktem Zugriff schützen Web Tier 2
O setDefaultUncaughtExceptionHandler in Servlets Web Tier 2
M Design-Frage: JSP, Servlets und CSS Web Tier 11
Java.getSkill() Webseiten JSP Servlets Struktur Web Tier 3
R File Einlesen mit jsp/servlets Web Tier 11
S Daten zwischen 2 Servlets aus 2 Webapplikationen teilen? Web Tier 17
D client-seitige Sessions mit Servlets Web Tier 5
M Bilder in Servlets Web Tier 8
U Grundaufbau der Webapp mit JSP/Servlets Web Tier 7
J Welcher WebServer(-anbieter) für Servlets? Web Tier 5
S Ablauffrage von Servlets Web Tier 2
G Kurze Frage zu Servlets&Struts Web Tier 4
L Massenaufruf ( 5000/s ) eines Servlets testen. Web Tier 4
G synchronized bei Servlets Web Tier 24
rambozola session attribut in servlets und jsps Web Tier 11
D Kann Servlets nicht kompilieren Web Tier 7
M Grundlegende Frage zu Servlets und JSPs Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben