Servlets:搜索web.xml文件的位置?多个web.xml文件是如何合并的?

时间:2014-06-10 13:36:22

标签: java tomcat tomcat7 web.xml servlet-3.0

我从Servlet 3规范中知道在web.xml目录中查找了WEB-INF/。但是,我相信还有其他web.xml个文件。例如,Tomcat has a web.xml file under $CATALINA_BASE/conf/。我想也可以将web.xml文件放在$CATALINA_HOME/conf/下。

我是否正确可以有多个web.xml个文件?如果是这样,它们可以处于什么位置,处理的顺序是什么,以及“合并”它们的语义是什么? (Servlet规范谈到合并web-fragment.xml个文件,但我认为这是一个单独的东西。)

1 个答案:

答案 0 :(得分:3)

你的问题有两个不同的方面。

Tomcat自己的web.xml

servlet规范允许容器(这里是Tomcat)定义一些默认组件(JSP,默认servlet ...)。 如您所见,Tomcat提供了一个默认的web.xml(仅在$CATALINA_BASE/conf/web.xml中)。 该web.xml允许Tomcat配置among other things

  1. 默认servlet(直接提供文件)
  2. 用于编译和执行jsp(和jspx)文件的jsp servlet
  3. 差异mime映射
  4. Tomcat的web.xml始终在应用程序中解析之前。因此,任何应用程序都可以覆盖tomcat定义的值。

    所以回答你的问题:在Tomcat中,有一个web.xml适用于所有webapps(在$CATALINA_BASE/conf目录中)和webapp自己的web.xml。

    网络fragment.xml之

    version 3.0 of the servlet specification开始,web.xml可以是WEB-INF / web.xml和容器可以在webapp类路径中找到的一些META-INF/web-fragment.xml的组合({{1 }或WEB-INF/classes)。

    可以确定解析这些网络片段的顺序。

    Tomcat可以在上下文(see doc)上使用logEffectiveWebXml属性记录生成的web.xml