1

我遇到了一个问题,Pretty Faces 会导致无限循环,由我的浏览器结束:Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

问题的确切原因

文件结构

在此处输入图像描述

pretty-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将导致网页。

提前致谢。

4

2 回答 2

5

我过去也有这个问题。问题是您的 Servlet 容器。如果您请求一个类似的 URL /login,您的容器会检查您的 Web 应用程序中是否有一个名为 的目录login。如果是这样,它会将您重定向到/login/,因为容器认为您想要访问此目录。如果还有删除尾部斜杠的重写规则,您将看到这样的行为。

我知道这很奇怪,但是 tomcat 用户列表中的某个人写道,这种行为符合规范。

因此,唯一的解决方案是在您的映射中更改/login/login/或重命名您的 webapp 中的登录文件夹。

于 2012-10-29T15:54:20.797 回答
3

我唯一的猜测是你FacesServlet的映射到,*.xhtml所以当一个请求被处理时,首先你的漂亮过滤器将它转发到你的 FacesServlet,但是,因为你的 xhtml 文件在路径中,然后转发再次被你的漂亮过滤器无限处理。

要解决它,请将您的视图放在 WEB-INF 文件夹中,并在您的pretty.config.xmlput 中添加如下内容:

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

这样过滤器截获的路径与你的servlet不一样,因为客户端可以请求WEB-INF文件夹中的资源

于 2012-10-29T15:17:35.173 回答