我从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
个文件,但我认为这是一个单独的东西。)
答案 0 :(得分:3)
你的问题有两个不同的方面。
servlet规范允许容器(这里是Tomcat)定义一些默认组件(JSP,默认servlet ...)。
如您所见,Tomcat提供了一个默认的web.xml(仅在$CATALINA_BASE/conf/web.xml
中)。
该web.xml允许Tomcat配置among other things:
Tomcat的web.xml始终在应用程序中解析之前。因此,任何应用程序都可以覆盖tomcat定义的值。
所以回答你的问题:在Tomcat中,有一个web.xml适用于所有webapps(在$CATALINA_BASE/conf
目录中)和webapp自己的web.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