【问题标题】:Handle hitting partial URL in JSF在 JSF 中处理部分 URL
【发布时间】:2012-05-18 00:16:09
【问题描述】:

我正在使用 JSF 2.0.5、Tomcat 7.0.12 和 Prettyfaces。

我的 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

【问题讨论】:

  • Tomcat前面不是有个Apache吗?

标签: java jsf prettyfaces


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 好的,但是我想识别何时有人在phase listener 层中点击了foo.com 和www.foo.com...我该怎么做?
    • 只有当请求通过 web.xml 文件中定义的 FacesServlet 时,您的阶段监听器才会出现。如果我假设正确,您的 FacesServlet 的 url 映射必须是 *.jsf 这不适用于 www.foo.com 或 foo.com
    • 如果真的要拦截请求,可以指定n个拦截Filter,url映射和jsp/index.jsf一样
    猜你喜欢
    • 1970-01-01
    • 2015-07-01
    • 2011-09-16
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多