从web.xml

时间:2015-09-15 09:39:56

标签: jsf glassfish facesservlet

我有一个最初是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。

1 个答案:

答案 0 :(得分:2)

在Servlet 3.0+容器上使用JSF 2.0+时,在webapp自己的FacesServlet中没有明确的web.xml注册,那么在webapp启动期间FacesServlet会自动在URL上注册模式/faces/**.faces*.jsf

另见javadoc

  

如果未在web.xmlweb-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.xmlweb-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模式。