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
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
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
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
sage ich dem Server, dass er beim Start index.jsf aufrufen soll.
Steht in der /WEB-INF/faces-config.xml folgendes
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
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>
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>
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>
Steht folgendes in der web.xml
Java:
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
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>
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