Servlets:在哪里查找web.xml文件?多个web.xml文件如何合并?

4
我知道根据Servlet 3规范,web.xml文件应该放在WEB-INF/目录下。但是,我认为还有其他的web.xml文件存在。例如,Tomcat 在$CATALINA_BASE/conf/目录下也有一个web.xml文件。我认为可以在$CATALINA_HOME/conf/目录下也放置web.xml文件。
如果我的理解是正确的,那么是否可以存在多个web.xml文件呢?它们可以位于哪些位置,并以什么顺序进行处理?对于“合并”它们而言,语义又是什么呢? (Servlet规范中提到了合并web-fragment.xml文件,但我想这是另一回事吧。)
1个回答

3

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

Tomcat自己的web.xml

servlet规范允许容器(这里是Tomcat)定义一些默认组件(JSP、默认servlet等)。 正如你所看到的,Tomcat提供了一个默认的web.xml来完成这个任务(并且只有一个,在$CATALINA_BASE/conf/web.xml中)。 这个web.xml允许Tomcat配置其他内容之间

  1. 一个默认servlet(直接提供文件)
  2. 一个jsp servlet来编译和执行jsp(和jspx)文件
  3. 不同的mime映射

Tomcat的web.xml总是先于应用程序中的web.xml解析。因此,任何应用程序都可以覆盖Tomcat定义的值。

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

web-fragment.xml

自从servlet规范版本3.0以来,web.xml可以是WEB-INF/web.xml和若干个container可以在webapp类路径(WEB-INF/classes或WEB-INF/lib)中找到的META-INF/web-fragment.xml的组合。

这些web-fragment的解析顺序是可以确定的。

而且Tomcat可以通过上下文的logEffectiveWebXml属性记录结果web.xml (见文档)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接