【问题标题】:URLs with .jsf extension still redirect to .xhtml after FacesServlet removal from web.xml从 web.xml 中删除 FacesServlet 后,带有 .jsf 扩展名的 URL 仍重定向到 .xhtml
【发布时间】:2015-12-11 12:15:57
【问题描述】:

我有一个 Web 应用程序,它最初是一个 JSF 应用程序,但已迁移到纯 HTML/JavaScript。我们现在正在彻底消除 JSF。

我们有“main.jsf”请求的物理文件 main.xhtml,其中 FacesServlet 在 web.xml 中声明,带有 url-mapping *.jsf。

我们已将内容移至 main.html,并在 main.xhtml 中放置一个元标记 REFRESH 以重定向到 main.html。

现在的问题是,即使我从 web.xml 中删除 FacesServlet,它仍然会将 main.jsf 的请求重定向到 main.xhtml。如果我将文件 main.xhtml 重命名为 main.jsf,请求 main.jsf 会给出 404,并且服务器日志说它找不到文件“main.jsp”。

现在的问题是:如果它重定向 *.jsf 到 *.jsp 或 *.xhtml,即使 web.xml 中没有 FacesServlet,是什么导致了这种重定向?

我正在使用 GlassFish 3.1.2.2。

【问题讨论】:

    标签: jsf glassfish facesservlet


    【解决方案1】:

    当在 Servlet 3.0+ 容器上使用 JSF 2.0+ 时,并且在 webapp 自己的 web.xml 中没有显式注册 FacesServlet 时,FacesServlet 将在 webapp 启动期间自动注册到 URL 模式 /faces/*, @ 987654326@和*.jsf

    另见其javadoc

    如果此 servlet 未显式映射到 web.xmlweb-fragment.xml 并且以下一个或多个条件为 true,则必须自动映射它。

    • WEB-INF 中找到faces-config.xml 文件

    • faces-config.xml 文件位于应用程序类路径中 jar 的 META-INF 目录中。

    • .faces-config.xml 结尾的文件名位于应用程序类路径中jar 的META-INF 目录中。

    • javax.faces.CONFIG_FILES 上下文参数在web.xmlweb-fragment.xml 中声明。

    • 传递给ServletContainerInitializer实现的onStartup()方法的类的Set不为空。

    如果运行时确定必须自动映射 servlet,则必须将其映射到以下 <url-pattern> 条目。

    • /faces
    • *.jsf
    • *.faces

    JSF 2.3 会将*.xhtml URL 模式添加到集合中(在 Mojarra 2.2.11 中向后移植)。

    如果你想阻止这种行为,并且你不能消除触发器(例如仍然有一个faces-config.xml),那么你最好的选择是在webapp自己的*.xhtml上显式注册FacesServlet*.xhtmlweb.xml .这将覆盖默认的自动注册 URL 模式。

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      相关资源
      最近更新 更多