2012-08-25 53 views
10

我正在開發一個JSF 2 Web應用程序。對於威望purpouses,我希望每個URL以.jsf擴展名結尾。現在它以.xhtml結尾。如果我在網頁瀏覽器地址欄中直接將其更改爲.jsf,則會顯示HTTP 500錯誤。如何在URL中使用.jsf擴展名?

如何將其設置爲.jsf

+0

如今,它的威望與目的'.do'結束它。 –

+2

@RomanC 2001年不是很受歡迎的東西嗎? (Struts 1)現在根本不使用擴展可能會更酷;)對於JSF,您可以使用OmniFaces或PrettyFaces。 –

+0

這是如此受歡迎,因爲他們將它添加到每個ISBN,例如http://shop.oreilly.com/product/9780596005726.do –

回答

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

我不認爲這是正確的。這是磁盤上實際文件的擴展名。 OP可能需要URL後綴,您可以通過web.xml中的servlet映射中的url-pattern(或通過忽略web.xml作爲* .jsf是JSF 2.1中的默認值)進行更改。 –

+0

忘記以前的評論,評論是爲了說只改變default_suffix的另一個答案。在這種情況下,servlet映射就足夠了,不需要更改default_suffix。 –

+0

Thenk你爲你的答案這可能是正確的關於其他來源。對不起延遲 - 我在度假,我可以要求一個更多的幫助?當我使用它並訪問page.jsf(page.xhtml存在於服務器端)時拋出空指針exeption,哪裏可能是問題?有web.xml:http://pastebin.com/3NqyYXSL,並有堆棧打印http://pastebin.com/g76TgabF – Tomas

17

JSF頁面的URL模式由FacesServlet<servlet-mapping>web.xml規定。

<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> 

您需要相應地改變<url-pattern>以獲得所需的虛擬URL擴展名:正如您提到.xhtml工作正常,如下你顯然已經配置它。

<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> 

這就是爲了達到具體的功能要求而需要改變的一切。

但是,這使安全問題開放。最終用戶現在可以在將URL中的擴展名從.jsf更改爲.xhtml時查看原始Facelets文件源代碼。您可以通過添加以下安全約束web.xml防止這種情況:

<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

我們是否可以通過將我們的.xhtml文件複製到WEF-INF來緩解這個安全問題? – abbas

+2

@abbas:'/ WEB-INF'中的文件不能公開訪問。只需將JSF映射設置爲'* .xhtml'即可。無需與虛擬URL爭執。 – 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

你爲什麼重複已經給出的答案? – BalusC

相關問題