我正在開發一個JSF 2 Web應用程序。對於威望purpouses,我希望每個URL以.jsf
擴展名結尾。現在它以.xhtml
結尾。如果我在網頁瀏覽器地址欄中直接將其更改爲.jsf
,則會顯示HTTP 500錯誤。如何在URL中使用.jsf擴展名?
如何將其設置爲.jsf
?
我正在開發一個JSF 2 Web應用程序。對於威望purpouses,我希望每個URL以.jsf
擴展名結尾。現在它以.xhtml
結尾。如果我在網頁瀏覽器地址欄中直接將其更改爲.jsf
,則會顯示HTTP 500錯誤。如何在URL中使用.jsf擴展名?
如何將其設置爲.jsf
?
<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>
我不認爲這是正確的。這是磁盤上實際文件的擴展名。 OP可能需要URL後綴,您可以通過web.xml中的servlet映射中的url-pattern(或通過忽略web.xml作爲* .jsf是JSF 2.1中的默認值)進行更改。 –
忘記以前的評論,評論是爲了說只改變default_suffix的另一個答案。在這種情況下,servlet映射就足夠了,不需要更改default_suffix。 –
Thenk你爲你的答案這可能是正確的關於其他來源。對不起延遲 - 我在度假,我可以要求一個更多的幫助?當我使用它並訪問page.jsf(page.xhtml存在於服務器端)時拋出空指針exeption,哪裏可能是問題?有web.xml:http://pastebin.com/3NqyYXSL,並有堆棧打印http://pastebin.com/g76TgabF – Tomas
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>
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>
你爲什麼重複已經給出的答案? – BalusC
如今,它的威望與目的'.do'結束它。 –
@RomanC 2001年不是很受歡迎的東西嗎? (Struts 1)現在根本不使用擴展可能會更酷;)對於JSF,您可以使用OmniFaces或PrettyFaces。 –
這是如此受歡迎,因爲他們將它添加到每個ISBN,例如http://shop.oreilly.com/product/9780596005726.do –