2012-10-29 35 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

相关问题