2012-05-09 23 views
1

我使用的是JSF 2.0.5,Tomcat 7.0.12和漂亮的面板。在JSF中處理部分URL

我的web.xml文件:

<welcome-file-list> 
    <welcome-file>/index.jsp</welcome-file> 
</welcome-file-list> 

我的漂亮文件配置:

<url-mapping> 
    <pattern>/</pattern> 
    <view-id>/jsp/index.jsf</view-id> 
</url-mapping> 

我的index.jsp文件是空的。

我的問題是,當我在url'foo.com'中寫入時,他最終重定向(301)到 http://www.foo.com/jsp/index.jsf

意味着,在我的聽衆階段:

HttpServletRequest req = (HttpServletRequest)context.getExternalContext().getRequest(); 
StringBuffer requestUrl = req.getRequestURL(); // i get http://www.foo.com/jsp/index.jsf 

有人能解釋爲什麼他被擊中的jsp/index.jsf?

因爲我想,當有人打foo.comwww.foo.com

+0

在Tomcat前面沒有Apache嗎? – fglez

回答

0

的「/」的圖案表示該應用程序,而你的情況就意味着www.foo.com的上下文根承認。由於你有一個從「/」到/jsp/index.jsf的映射,Servlet容器會帶你到那裏。

+0

好的,但我想知道有人在「階段偵聽器」層次中點擊「foo.com」和「www.foo.com」......我該怎麼做? – choop

+0

當請求通過web.xml文件中定義的FacesServlet時,您的階段偵聽器纔會進入畫面。如果我假設正確,你的FacesServlet的映射必須是* .jsf,它不適用於www.foo.com或foo.com – Nerrve

+0

,如果你真的想攔截請求,那麼你可以指定n攔截具有相同url的Filter映射爲jsp/index.jsf – Nerrve

1

如果有人通過您的配置訪問http://foo.com/http://www.foo.com/,PrettyFaces會攔截請求並將其內部轉發至/jsp/index.jsf。 PhaseListener只會看到這個轉發的請求,因此只能看到/jsp/index.jsf

如果你想得到原始的URL,你可以使用PrettyContext.getCurrentInstance().getRequestURL().toURL()

但是,你的情況有點怪異的一點是,你寫道,當他訪問根路徑時,用戶被重定向(301)。這可能會導致我的上述建議無效,因爲在重定向後,您將丟失原始請求中的所有信息。

也許您可以嘗試從web.xml中刪除welcome-file條目,並確保您的pretty-config.xml中沒有任何其他重寫規則可能導致此重定向。