Servlet Mapping mit JSF

hyperion

Bekanntes Mitglied
Hallo,

so nach langer Frustpause habe ich nun mal wieder versucht an meinem JAVA Projekt weiter zu kommen. Und ich scheitere wieder an der selben Stelle. Ich bekomme einfach nicht diesen HTTP Error 404 weg.
Ich denke das Hauptproblem liegt immer noch darin, dass mir der Java EE bereich immernoch wie ein Zauberkasten vorkommt. In JAVA SE war ich es gewohnt, dass ich alles nachverfolgen kann. In Java EE gibt es einen Server der entsprechend von Konfigurationsdateien reagiert. Leider basiert mein "Wissen" dazu nur auf Vermutungen. Ich äußere jetzt einfach mal meien Vermutungen und hoffe, dass ihr mich korrigiert wenn ich irgendwo falsch liege, damit dieser Zauberkasten sich für mich endlich mal auflöst.
Ich vermute mal es ist in den Server einprogrammiert, dass der Server im /WEB-INF/ Verzeichnis nach der web.xml Datei schaut. Das ist der zentrale Punkt für den Server, wo die Konfiguration enthalten sind oder Dateien angegeben sind die Konfigurationen enthalten.

Steht folgendes in der web.xml
Java:
<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>
sage ich dem Server, dass er ein Servlet der Klasse javax.faces.webapp.FacesServlet unter dem Namen Faces Servlet verwenden soll, welches der Server beim Starten anlegt.

Steht folgendes in der web.xml
Java:
<servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
        <url-pattern>/WEB-INF/jsf/*</url-pattern>
</servlet-mapping>
sage ich dem Server, dass er für alle Anfrage die an ihn kommen, die dem Pattern *.jsf oder /WEB-INF/jsf/* genügen, an das Servlet mit dem namen Faces Servlet übergeben werden. Das Servlet der Klasse javax.faces.webapp.FacesServlet enthält Methoden die der Server dazu verwendet, aus einer XHTML-Datei eine JSF-Datei zu erzeuge, also aus dem Code eine HTML-Ausgabe zu erzeugen.

Steht folgendes in der web.xml
Java:
<context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
sage ich dem Server, dass das Konfigurationfile für JSF unter /WEB-INF/faces-config.xml zu finden ist. was javax.faces.CONFIG_FILES bedeuten soll ist mir ein Rätsel. Meines Wissens nach werden Klassen mit der Kamelschrift geschrieben. Reine Großschreibung kenne ich nur von Konstanten. Ist das eine Klasse und wenn ja was macht diese? Wenn nein, was ist das?

Steht folgendes in der web.xml
Java:
<welcome-file-list>
        <welcome-file>index.jsf</welcome-file>
</welcome-file-list>
sage ich dem Server, dass er beim Start index.jsf aufrufen soll.

Steht in der /WEB-INF/faces-config.xml folgendes
Java:
<navigation-rule>
		<from-view-id>/index.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>login</from-outcome>
			<to-view-id>/WEB-INF/jsf/login.jsf</to-view-id>
		</navigation-case>
                <navigation-case>
			<from-outcome>register</from-outcome>
			<to-view-id>/WEB-INF/jsf/register.jsf</to-view-id>
		</navigation-case>
</navigation-rule>  
<navigation-rule>
		<from-view-id>/login.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>register</from-outcome>
			<to-view-id>/WEB-INF/jsf/register.jsf</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>success</from-outcome>
			<to-view-id>/WEB-INF/jsf/home.jsf</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-outcome>failure</from-outcome>
			<to-view-id>/WEB-INF/jsf/login.jsf</to-view-id>
		</navigation-case>
</navigation-rule>
sage ich dem Server zum Beispiel, dass wenn aus der Seite index.xhtml register rauskommt er /WEB-INF/jsf/register.jsf aufrufen soll.
Ich würde nun gerne kurz meinen aktuellen Versuch durchspielen und sagen woran es scheitert.
Also ich rufe http://localhost:8080/WebApplication1/ auf.
Der Server schaut nun in die web.xml und stellt fest, dass keine konkrete Seite angegeben wurde und deshalb das welcom-file geladen wird. Es wird also index.jsf aufgerufen.
Der Server schaut jetzt wieder in die web.xml und stellt fest, dass index.jsf zum pattern *.jsf passt. Er übergibt also den Aufruf an das Faces Servlet.
Das Faces Servlet schaut nun ob eine Datei Namens index.xhtml vorhanden ist und erzeugt daraus index.jsf und schickt diese an mich.
Ich klicke dort auf den Loginbutton, welcher im action-Attribut "login" enthält. Dadurch wird login an den Server übertragen.
Der Server schaut nun wieder in /WEB-INF/faces-config.xml nach ob da etwas steht, was mit der Ausgabe login von index.xhtml passieren soll. Dort steht, dass /WEB-INF/jsf/login.jsf aufgerufen werden soll. Das passiert dann auch.
Der Server schaut jetzt wieder in die web.xml und stellt fest, dass /WEB-INF/jsf/login.jsf zum pattern *.jsf passt(oder auch zu dem anderen pattern). Er übergibt also den Aufruf an das Faces Servlet.
Das Faces Servlet schaut nun ob eine Datei Namens /WEB-INF/jsf/login.xhtml vorhanden ist und erzeugt daraus login.jsf und schickt diese an mich.
Bis hier funktioniert noch alles. Ich weiß nicht ob das wirklich alles so passiert wie ichs hier beschrieben habe, aber ich bekomme login.jsf noch zu sehen.
Ich klicke nun auf den Link Registrieren, welcher im outcome-Attribut (action gibt es bei link nicht) register enthält. Dadurch wird register an den Server übertragen.
Der Server schaut nun wieder in /WEB-INF/faces-config.xml nach ob da etwas steht, was mit der Ausgabe register von login.xhtml passieren soll. Dort steht, dass /WEB-INF/jsf/register.jsf aufgerufen werden soll.
Der Server schaut jetzt wieder in die web.xml und stellt fest, dass /WEB-INF/jsf/register.jsf zum pattern *.jsf passt(oder auch zu dem anderen pattern). Er übergibt also den Aufruf an das Faces Servlet.
Das Faces Servlet schaut nun ob eine Datei Namens /WEB-INF/jsf/register.xhtml vorhanden ist und erzeugt daraus register.jsf und schickt diese an mich.
Leider bekomme ich hier nur HTTP Error 404 und ich kann mir einfach nicht erklären warum. Ich komme hier auch einfach nicht weiter. Weder durch das Internet noch durch das bloße durchprobieren von Möglichkeiten.

Gruß hyperion
 

Fantasma

Aktives Mitglied
Vorweg... ich bin noch neuer als Du in der Materie.

Aber zwei Sachen die mir aufgefallen sind:

- "<url-pattern>/WEB-INF/jsf/*</url-pattern>"
In den ganzen Beispielen im Netz habe ich noch nie gesehen, dass WEB-INF im pattern matching angegeben war.
Die Pfade sollen sich ja immer auf Root beziehen. Das könnte ein Grund sein.

- <servlet-name>Faces Servlet</servlet-name>
Ich kann wieder nur von Beispielen im Netz reden aber ich hab hier auch noch nie einen Servlet Namen mit
Leerzeichen gesehen. Vielleicht macht das auch Probleme?

Wie gesagt ich hab keine große Ahnung aber das ist mir halt aufgefallen.
Vielleicht kannst du ja weiter recherchieren :)

Viel Glück
 

mvitz

Top Contributor
Kurz dazu: Leerzeichen im Servlet Namen waren bei mir bisher nie ein Problem (d.h. nicht dass das in jedem Container funktioniert ^^).

Das Mapping ist natürlich quatsch. Das würde ich mal raus nehmen.
 

hyperion

Bekanntes Mitglied
Hallo,

ok. So natürlich ist das nicht, dass das Quatsch ist, deshalb frage ich noch kurz nach. Warum ist das Quatsch?

Gruß hyperion
 

mvitz

Top Contributor
1. Wozu brauchst du das 2te Mapping denn noch? Du verlinkst doch eh alles auf .jsf und dann brauchst du das nicht.

2. WEB-INF suggeriert, dass du damit irgendwie auf den Ablageort deiner Views verweisen möchtest, aber URL Patterns sind halt nur für die Aufrufer deiner Seite. Dabei nimmt der Ordner WEB-INF sowieso eine Sonderstellung ein, da alles was hier liegt NICHT direkt von außen zugreifbar ist.
 

hyperion

Bekanntes Mitglied
Zu 1.: Ich habe doch die Wahl bei Links oder Buttons, entweder eine URL oder einen Wert auszugeben. Ich habe mich für den Wert entschieden und welche Seite aufgerufen wird dann im Mapping entschieden. Würde ich das 2. Mapping jetzt entfernen und bei login.xhtml auf registrieren klicken, wie soll dann entschieden werden welche Seite aufgerufen werden soll?

Zu 2.: Ja, ich hab alle Views bis auf Index.xhtml im WEB-INF Ordner, um zu verhindern, dass jemand den Code sehen kann. Die Views sollten auch nicht mit einer URL aufgerufen werden. Im Mapping ist ja auch ein relatives Verzeichnis angegeben und keine Url. Dachte ich zumindest.

Gruß hyperion
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R servlet-mapping führt zu 404-Fehlern Web Tier 0
A redirect mit servlet-mapping in web.xml Web Tier 4
D JSF Servlet Mapping Web Tier 3
K Servlet URL Mapping Web Tier 3
F Servlet mapping ;-) Web Tier 3
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
B Servlet mit TomCat9 Web Tier 0
J Wie Mouse Event in Servlet einbinden? Web Tier 1
J Session Servlet - JavaScript Web Tier 6
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
Todesbote Servlet MVC Design Pattern Web Tier 1
A Anfänger-Frage Servlet/Applet/JSP Web Tier 0
Shams Allgemeine Verständnisfrage zum Thema Servlet (in Vaadin) Web Tier 2
H File Output Servlet Web Tier 6
I vTiger Astersik Connector: NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet Web Tier 0
OnDemand Servlet oder JSP Web Tier 12
H Servlet/JSP und OSGI Web Tier 2
L Servlet Datenbank Web Tier 0
D Java EE Servlet login Problem Web Tier 1
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Java Bean und Java Servlet Web Tier 2
D Servlet Servlet Weiterleitung static html Web Tier 5
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
H Servlet lässt sich nicht deployen Web Tier 7
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
J Servlet Zugriff Servlet Web Tier 11
A JSON von JavaScript an Servlet Web Tier 9
K Servlet + JSP: JSP-Seite ein Array/ArrayList überliefern vom Controller-Servlet Web Tier 8
0 Servlet.Properties Web Tier 3
P Servlet Wo gibt es das javax.servlet.Servlet? Web Tier 2
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
5 Bild Pfad Servlet Web Tier 2
D Datenbankzugriff im Servlet Web Tier 5
H Servlet Apache Geronimo: Servlet nicht erreichbar Web Tier 2
S Ich brauche Buchempfehlung über JSP und Servlet Web Tier 2
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
S ClassPath für Servlet Web Tier 3
reibi Servlet Logging - Standard Servlet Web Tier 5
K Portlet, Servlet doGet und doPost Web Tier 4
reibi Servlet Alleinlaufendes Servlet bauen Web Tier 6
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
lukas24680 Servlet pro Request Web Tier 2
C Pageing mit JSp&Servlet Web Tier 5
D JSP JSP integriert ein Servlet... Wie? Web Tier 7
I Servlet vor Browser URL-Direktzugriff schützen Web Tier 3
N Servlet ausführen Web Tier 26
B statische Html Seite als response erhalten (Servlet) Web Tier 3
A javax/servlet/jsp/jstl/core/Config Web Tier 1
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
W MVC mit Bean, JSP und Servlet Web Tier 6
T Button im Servlet - Werte übergeben Web Tier 2
J werte per post an servlet übergeben und auswerten Web Tier 3
ruutaiokwu HttpServletRequest-instanz in servlet und JSP unterschiedlich? Web Tier 5
T Bild durch anderes Bild ersetzen mit Servlet Web Tier 3
E Mein erstes Servlet Web Tier 8
S Servlet automatisch aufrufen Web Tier 2
J Kommunikation zwischen Servlet und EJB Web Tier 6
C Image in Servlet Web Tier 2
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
N API Nutzung SERVLET Web Tier 12
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
G Servlet Ausgabe richtig benutzen Web Tier 4
W Servlet auf sich selbst verweisen lassen (Anfängerfrage) Web Tier 6
M Servlet Ausführungsfehler Web Tier 4
D Servlet alle 6h ausführen Web Tier 5
M Servlet & JSP Organisation Web Tier 2
J seltsames Auslastungsproblem bei Servlet Web Tier 7
ruutaiokwu JSF - läuft ausserhalb des servlet-containers? Web Tier 5
R Direkten Servlet-Aufruf verhindern (JSP) Web Tier 3
K Formularweiterleitung an Servlet Web Tier 5
N Servlet: Problem mit getParameterValues Web Tier 4
J Dateiupload- Servlet Web Tier 14
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
G Kommunikation Servlet + Applikation Web Tier 4
megachucky Welche Servlet-Version benötigt GWT 2.0? Web Tier 13
X Servlet Select box Web Tier 6
S Java Servlet Content Type Web Tier 3
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
M Servlet neuladen Web Tier 2
H Wie wurde ein Servlet aufgerufen Web Tier 2
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
H servlet fehlermeldung Web Tier 3
W JSP/Servlet Web Applikation programmierung Web Tier 9
J Faces response aus einem anderen Servlet heraus rendern Web Tier 4
E Servlet mit einem Link aufrufen? Web Tier 13
D Servlet FacesServlet is not available und Web Tier 3
S servlet bedienen mit get und post parameter Web Tier 10
S Laden von globalen Resourcen im Servlet Container..? Web Tier 3
T JBoss + Servlet + HTML Fileupload + Encoding Web Tier 1
2 Servlet: Pfad zu Webcontent Web Tier 6
J Servlet Sicherheit Web Tier 4
J struts2: vom value stack zum servlet Web Tier 14
D Servlet-Klassen und Templates trennen? Web Tier 18
MQue Servlet destroy Web Tier 11

Ähnliche Java Themen

Neue Themen


Oben