2012-10-29 31 views
1

我也碰到過,其中漂亮的面孔會導致一個無限循環,我的瀏覽器結束了一個問題:Firefox has detected that the server is redirecting the request for this address in a way that will never complete.重定向通過漂亮的面孔

問題

文件結構的確切原因

enter image description here

漂亮-config.xml的片段

<url-mapping id="login"> 
    <pattern value="/login" /> 
    <view-id value="/login/login.xhtml" /> 
</url-mapping> 

<url-mapping id="register"> 
    <pattern value="/register" /> 
    <view-id value="/login/register.xhtml" /> 
</url-mapping> 

說明

導航到localhost:8080/register將導致我的網頁。 導航到localhost:8080/login將導致描述的循環,請注意,導航將導致重定向到localhost:8080/login/ < - 尾部斜線。

我的猜測是,localhost:8080/login是文件夾login的請求。但我不知道如何解決它,所以我對localhost:8080/login的請求將導致網頁。

在此先感謝。

+0

你可以發佈你的部署描述符嗎? – ElderMael

回答

3

我唯一的猜測是,你FacesServlet映射到*.xhtml因此,當一個請求被處理,首先你漂亮的過濾器將其轉發給您的FacesServlet的,但是,因爲你的XHTML文件路徑,向前,然後再由處理你的漂亮過濾器廣告無窮無盡。

爲了解決這個問題,把你的意見的WEB-INF文件夾內,並在您pretty.config.xml把這樣的事情:

<url-mapping id="login"> 
    <pattern value="/login/" /> 
    <view-id value="/WEB-INF/views/login.xhtml" /> 
</url-mapping> 

這樣被過濾器攔截的路徑是不一樣的你的servlet,因爲客戶可以請求WEB-INF文件夾中的資源

+0

您的權利,這將再次由FacesServlet處理。但是這對於'register'來說不是一樣的嗎? – Aquillo

+1

不是,因爲文件位於'/ login/register.xhtml'中,所以它與''不匹配,因爲文件路徑中尾隨'/ login /'。 – ElderMael

+0

好吧,那樣的話,我認爲我最終需要通配符。我現在完全瞭解它,謝謝梅爾! – Aquillo

4

我以前也有這個問題。問題是你的Servlet容器。如果您請求的網址類似/login,則表示容器檢查,如果您的Web應用程序中有一個名爲login的目錄。如果是這樣,它將您重定向到/login/,因爲容器認爲您要到達此目錄。如果還有刪除尾部斜線的重寫規則,您將看到類似這樣的行爲。

我知道這很奇怪,但tomcat用戶列表中的一些人寫道,這種行爲是根據規範。

所以唯一的解決方案是在映射中將/login更改爲/login/或重命名webapp中的登錄文件夾。

+0

你似乎是正確的,我有點困惑,因爲我一直在試驗一些過濾器。事實證明,確實一個(通過Pretty Faces)重定向請求不會再次傳遞Pretty Faces,因此不會像Mael所描述的那樣導致這種情況。 – Aquillo

相關問題