我遇到过一个问题,其中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/
&lt; - 斜杠。
我猜,localhost:8080/login
是对login
文件夹的请求。但我不知道如何修复它,因此我对localhost:8080/login
的请求将导致该网页。
提前致谢。
答案 0 :(得分:5)
我过去也遇到过这个问题。问题是你的Servlet容器。如果您要请求/login
之类的URL,则在您的Web应用程序中有一个名为login
的目录时进行容器检查。如果是这样,它会将您重定向到/login/
,因为容器认为您想要访问此目录。如果还有删除尾部斜杠的重写规则,您将看到这样的行为。
我知道这很奇怪,但tomcat用户列表上的一些人写道,这种行为是根据规范进行的。
因此,唯一的解决方案是在映射中将/login
更改为/login/
,或者在webapp中重命名登录文件夹。
答案 1 :(得分: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
文件夹中请求资源