漂亮面孔的重定向

时间:2012-10-29 14:57:10

标签: java jsf redirect prettyfaces

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

问题的确切原因

文件结构

enter image description here

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的请求将导致该网页。

提前致谢。

2 个答案:

答案 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文件夹中请求资源