我有一个最初是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。
答案 0 :(得分:2)
在Servlet 3.0+容器上使用JSF 2.0+时,在webapp自己的FacesServlet
中没有明确的web.xml
注册,那么在webapp启动期间FacesServlet
会自动在URL上注册模式/faces/*
,*.faces
和*.jsf
。
另见javadoc:
如果未在
web.xml
或web-fragment.xml
中显式映射此servlet,则必须自动映射此servlet,并且以下一个或多个条件为true
。
- 中找到
在
faces-config.xml
WEB-INF
个文件在应用程序类路径的jar的
faces-config.xml
目录中找到META-INF
文件。以
.faces-config.xml
结尾的文件名位于应用程序类路径中jar的META-INF
目录中。
javax.faces.CONFIG_FILES
上下文参数在web.xml
或web-fragment.xml
中声明。传递给
Set
实施的onStartup()
方法的ServletContainerInitializer
个类不为空。如果运行时确定必须自动映射servlet,则必须将其映射到以下
<url-pattern>
条目。
/faces
*.jsf
*.faces
JSF 2.3会将*.xhtml
网址格式添加到集合中(在Mojarra 2.2.11中向后移植)。
如果你想停止这种行为,并且你无法消除触发器(例如仍然有faces-config.xml
),那么你最好的办法是在FacesServlet
上明确注册*.xhtml
在webapp自己的web.xml
中。这将覆盖默认的自动注册URL模式。