# WEB-INF Verzeichnis



## hyperion (13. Mrz 2011)

Hallo,

aktuell habe ich alle meine facelets in Unterordner im Ordner WEB-INF damit keiner den Code sehen kann. Leider ist es aktuell so, dass ich die Seiten aber auch nicht aufrufen kann. Die einzigste Seite die derzeit angezeigt werden kann, ist die die als Welcome File eingetragen ist. Ansonsten bekomme ich einen HTTP Error 404.

Mein Ziel ist es eigentlich, dass jede Seite durch eine eigene URL aufrufbar ist, aber immer nur jeweils die generierte HTML Ausgabe angezeigt wird und nicht der ursprüngliche Code. Ich habe gehofft, das zu erreichen, indem ich die .xhtml-Dateien in das WEB-INF Verzeichnis tue. Aber nun habe ich gar keinen Zugriff auf die Seiten.

index.html (Welcome File im Ordner WEB-INF/jsf/

```
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Willkommen</title>
    </h:head>
    <h:body>
        <h:form id="indexForm">
            <h:outputText value="Willkommen" />
            <h:panelGrid id="indexPanelGrid" columns="2">
                <h:commandButton id="login" action="login" value="Login" />
                <h:commandButton id="register" action="register" value="Register" />
            </h:panelGrid>            
        </h:form>
    </h:body>
</html>
```

faces-config.xml (Im Verzeichnis WEB-INF)

```
<faces-config version="2.0"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
       
        <navigation-rule>
		<from-view-id>/WEB-INF/jsf/index.xhtml</from-view-id>
		<navigation-case>
			<from-outcome>login</from-outcome>
			<to-view-id>login.xhtml</to-view-id>
		</navigation-case>
                <navigation-case>
			<from-outcome>register</from-outcome>
			<to-view-id>/WEB-INF/jsf/register.xhtml</to-view-id>
		</navigation-case>
	</navigation-rule>       
        
</faces-config>
```

Die beiden Seiten register.xhtml und login.xhtml befinden sich beide in WEB-INF/jsf/. Ich habe das nur einmal mit /WEB-INF/jsf/ und einmal ohne zum Testen probiert. Beide Verweise funktionieren aber nicht und führen zu 404.

web.xml (Im Verzeichnis WEB-INF)

```
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
    </context-param>
    <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>/WEB-INF/jsf/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>
```

Was muss ich tun, damit die Seiten erreichbar sind?

Gruß hyperion


----------



## maki (13. Mrz 2011)

> Was muss ich tun, damit die Seiten erreichbar sind?


Alles was unter WEB-INF liegt ist ausserhalb des direkten Zugriffes eines Browsers, also verboten.
Diese Inhalte können nur von innerhalb des Servers erreicht werden, also von Servlets und forwards.

Wenn die index.html nicht im WEB-INF Ordner liegt, kann sie also vom Client erreicht werden.


----------



## hyperion (13. Mrz 2011)

Hallo,

und was ist nun bei JSF die gängige Verfahrensweise. In welches Verzeichnis kommen die Facelets? 

Gruß hyperion


----------



## maki (13. Mrz 2011)

Normalerweise liegen die JSPs/Facelets nicht unter WEB-INF, das macht man nur aus Sicherheitsgründen.

Du könntest die JSPs/facelets schon unter WEB-INF legen (ausser die index Datei, denn diese soll ja zugänglich sein), musst dann aber dafür sorgen, dass kein Client die Seiten direkt anspricht, sondern immer über das Faces Servlet geht, ist für den Anfang eben komplexer.

MVC im Java Web Bereich bedeuetet immer, dass keine Seite eine direkte Referenz auf eine andere Seite hat, sondern immer erst über ein Servlet gegangen wird.

Für den Anfang würde ich dir empfehlen die einfachste Variante zu wählen, kompliziert wird es schon von selber


----------



## hyperion (14. Mrz 2011)

Hallo,

ich hatte gehofft, dass ich das genau damit erreiche:


```
<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
```


Bedeutet das nicht, dass alle anfragen an .xhtml-Seiten über das FacesServlet gehen?

Gruß hyperion


----------

