从 web.xml 中删除 FacesServlet 后,带有 .jsf 扩展名的 URL 仍然重定向到 .xhtml
URLs with .jsf extension still redirect to .xhtml after FacesServlet removal from web.xml
我有一个最初是 JSF 应用程序的 Web 应用程序,但已迁移到纯 HTML/JavaScript。我们现在正在彻底淘汰 JSF。
我们有物理文件 main.xhtml,它是由 "main.jsf" 请求的,其中 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。
当在 Servlet 3.0+ 容器上使用 JSF 2.0+ 时,并且在 webapp 自己的 web.xml
中没有显式 FacesServlet
注册,那么 FacesServlet
将在 webapp 启动期间自动注册URL 模式 /faces/*
、*.faces
和 *.jsf
.
另见其 javadoc:
This servlet must automatically be mapped if it is not explicitly mapped in web.xml
or web-fragment.xml
and one or more of the following conditions are true
.
A faces-config.xml
file is found in WEB-INF
A faces-config.xml
file is found in the META-INF
directory of a jar in the application's classpath.
A filename ending in .faces-config.xml
is found in the META-INF
directory of a jar in the application's classpath.
The javax.faces.CONFIG_FILES
context param is declared in web.xml
or web-fragment.xml
.
The Set
of classes passed to the onStartup()
method of the ServletContainerInitializer
implementation is not empty.
If the runtime determines that the servlet must be automatically mapped, it must be mapped to the following <url-pattern>
entries.
/faces
*.jsf
*.faces
JSF 2.3 将向集合添加 *.xhtml
URL 模式(在 Mojarra 2.2.11 中向后移植)。
如果你想停止这种行为,并且你不能消除触发器(例如仍然有一个 faces-config.xml
),那么你最好的选择是在 [=35 上显式注册 FacesServlet
=] 在 webapp 自己的 web.xml
中。这将覆盖默认的自动注册 URL 模式。
我有一个最初是 JSF 应用程序的 Web 应用程序,但已迁移到纯 HTML/JavaScript。我们现在正在彻底淘汰 JSF。
我们有物理文件 main.xhtml,它是由 "main.jsf" 请求的,其中 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。
当在 Servlet 3.0+ 容器上使用 JSF 2.0+ 时,并且在 webapp 自己的 web.xml
中没有显式 FacesServlet
注册,那么 FacesServlet
将在 webapp 启动期间自动注册URL 模式 /faces/*
、*.faces
和 *.jsf
.
另见其 javadoc:
This servlet must automatically be mapped if it is not explicitly mapped in
web.xml
orweb-fragment.xml
and one or more of the following conditions aretrue
.
A
faces-config.xml
file is found inWEB-INF
A
faces-config.xml
file is found in theMETA-INF
directory of a jar in the application's classpath.A filename ending in
.faces-config.xml
is found in theMETA-INF
directory of a jar in the application's classpath.The
javax.faces.CONFIG_FILES
context param is declared inweb.xml
orweb-fragment.xml
.The
Set
of classes passed to theonStartup()
method of theServletContainerInitializer
implementation is not empty.If the runtime determines that the servlet must be automatically mapped, it must be mapped to the following
<url-pattern>
entries.
/faces
*.jsf
*.faces
JSF 2.3 将向集合添加 *.xhtml
URL 模式(在 Mojarra 2.2.11 中向后移植)。
如果你想停止这种行为,并且你不能消除触发器(例如仍然有一个 faces-config.xml
),那么你最好的选择是在 [=35 上显式注册 FacesServlet
=] 在 webapp 自己的 web.xml
中。这将覆盖默认的自动注册 URL 模式。