2012-08-25 3 views
10

Ich entwickle eine JSF 2 Webanwendung. Für Prestige-Zwecke möchte ich, dass jede URL mit .jsf Erweiterung endet. Jetzt endet es mit .xhtml. Wenn ich es direkt in .jsf in Webbrowser-Adressleiste ändern, wird ein HTTP 500-Fehler angezeigt.Wie wird die Erweiterung .jsf in URLs verwendet?

Wie kann ich es auf .jsf setzen?

+0

Heutzutage ist es Prestige Zweck es mit '.do' zu beenden. –

+2

@RomanC War nicht .do die beliebte Sache im Jahr 2001? (Struts 1) Heutzutage ist die Verwendung einer Erweiterung gar nicht cooler;) Für JSF können Sie OmniFaces oder PrettyFaces verwenden. –

+0

Es ist so beliebt, wie sie es zu jeder ISBN hinzufügen, zum Beispiel http://shop.oreilly.com/product/9780596005726.do –

Antwort

2
<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
+0

Ich glaube nicht, dass das stimmt. Dies ist die Erweiterung für die eigentliche Datei auf der Festplatte. OP möchte wahrscheinlich das URL-Suffix, das Sie über das URL-Muster im Servlet-Mapping in web.xml ändern (oder indem Sie web.xml als * .jsf weglassen, ist der Standard in JSF 2.1). –

+0

Vergessen Sie den vorherigen Kommentar, Kommentar war für eine andere Antwort, die besagt, nur default_suffix zu ändern. In diesem Fall reicht das Servlet-Mapping aus, es ist nicht notwendig, default_suffix zu ändern. –

+0

Thenk Sie für Ihre Antwort, die wahrscheinlich in Bezug auf andere Quellen korrekt ist. Sorry für die Verspätung - ich war im Urlaub, könnte ich noch um Hilfe bitten? Wenn ich es benutze und acces page.jsf (page.xhtml existiert auf der Serverseite) Nullzeiger-Ausnahme wird geworfen, wo könnte das Problem sein? Es gibt web.xml: http://pastebin.com/3NqyYXSL und es gibt Stack-Druck http://pastebin.com/g76TgabF – Tomas

17

Die URL-Muster von JSF-Seiten werden durch <servlet-mapping> der FacesServlet in web.xml angegeben. Wie Sie erwähnt, dass .xhtml funktioniert gut, Sie haben es offenbar wie folgt konfiguriert:

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern>  
</servlet-mapping> 

Sie müssen die <url-pattern> entsprechend ändern, um die gewünschte virtuelle URL-Erweiterung zu bekommen.

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern>  
</servlet-mapping> 

Das ist alles, was Sie ändern müssen, um die konkrete funktionale Anforderung wirklich zu erfüllen.

Allerdings, dies bringt ein Sicherheitsproblem auf. Der Endbenutzer kann jetzt den Quelltext der ursprünglichen Facelets-Datei anzeigen, wenn er die Erweiterung in der URL zurück von .jsf in .xhtml ändert. Sie können dies verhindern, indem Sie die folgende Sicherheitsbeschränkung zu web.xml Zugabe:

<security-constraint> 
    <display-name>Restrict access to Facelets source code.</display-name> 
    <web-resource-collection> 
     <web-resource-name>Facelets</web-resource-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </web-resource-collection> 
    <auth-constraint/> 
</security-constraint> 
+0

können wir dieses Sicherheitsproblem alternativ lösen, indem Sie unsere .xhtml-Dateien nach WEF-INF kopieren? – abbas

+2

@abbas: Dateien in '/ WEB-INF' sind nicht öffentlich zugänglich. Setzen Sie einfach JSF-Mapping auf '* .xhtml'. Kein Problem mit virtuellen URLs. – BalusC

-1
you can add this code in your web.xml, and you can run your pages ends with xhtml, jsf or faces 
<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>*.jsf</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
+0

Warum wiederholst du eine bereits gegebene Antwort? – BalusC

Verwandte Themen