1

我正在使用 JSF 2.0.5、Tomcat 7.0.12 和漂亮的面孔。

我的 web.xml 文件是:

<welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
</welcome-file-list> 

我漂亮的文件配置:

<url-mapping>
    <pattern>/</pattern>
    <view-id>/jsp/index.jsf</view-id>
</url-mapping> 

我的 index.jsp 文件是空的。

我的问题是,当我在 url 'foo.com' 中写入时,他最终会将 (301) 重定向到 http://www.foo.com/jsp/index.jsf

意味着在我的 Phase 监听器中:

HttpServletRequest req = (HttpServletRequest)context.getExternalContext().getRequest(); 
StringBuffer requestUrl = req.getRequestURL(); // i get http://www.foo.com/jsp/index.jsf

有人可以解释他为什么要点击 jsp/index.jsf 吗?

因为我想识别何时有人foo.com击中www.foo.com

4

2 回答 2

1

如果有人访问http://foo.com/http://www.foo.com/使用您的配置,PrettyFaces 会拦截请求并在内部将其转发到/jsp/index.jsf. 您 PhaseListener 只会看到这个转发的请求,因此只会看到/jsp/index.jsf.

如果要获取原始 URL,可以使用PrettyContext.getCurrentInstance().getRequestURL().toURL().

但是,在您的情况下有点奇怪的一件事是,您写道,当用户访问根路径时,用户会被重定向(301)。这可能会导致我上面的建议不起作用,因为在重定向后,您会丢失原始请求中的所有信息。

也许您可以尝试welcome-file从您的条目中删除该条目,web.xml并确保您的条目中没有任何其他pretty-config.xml可能导致此重定向的重写规则。

于 2012-06-02T08:40:46.927 回答
0

“/”模式表示应用程序的上下文根,在您的情况下意味着 www.foo.com。由于您有一个从“/”到 /jsp/index.jsf 的映射,因此 Servlet 容器会将您带到那里。

于 2012-05-09T15:28:48.217 回答