這裏輸入引用文本在Tomcat的
conf目錄
下,有關於全局組件配置的server.xml
,有關於角色與用戶配置的tomcat-users.xml
文件,有關於包內訪問安全限制及自定義ClassLoader的catalina.properties
文件,還有一個用於作部署在此Tomcat內全部web應用的全局配置的web.xml
。 相似於面向對象編程中的父類
的概念。全部的應用都會將此文件中定義的信息包含,和應用程序自身的web.xml作一個相似merge的操做。web
瞭解了以上信息以後,來看一下Tomcat內部是如何解析web.xml文件的。apache
web.xm組件加載順序爲:context-param -> listener -> filter -> servlet(同類則按編寫順序執行)。 tomcat啓動時序圖編程
解析web.xml的代碼,位於ContextConfig類中:tomcat
Set<WebXml> defaults = new HashSet<>(); defaults.add(getDefaultWebXmlFragment());//首先是默認web.xml WebXml webXml = createWebXml(); // Parse context level web.xml InputSource contextWebXml = getContextWebXmlSource(); if (!webXmlParser.parseWebXml(contextWebXml, webXml, false)) { ok = false; }
再以後是Servlet3的新特性中的web-fragement特性。須要先解析已有jar包中是否包含自定義配置安全
/* Ordering is important here Step 1. Identify all the JARs packaged with the application and those provided by the container. If any of the application JARs have a web-fragment.xml it will be parsed at this point. web-fragment.xml files are ignored for container provided JARs. */ Map<String,WebXml> fragments = processJarsForWebFragments(webXml); // Step 2. Order the fragments. Set<WebXml> orderedFragments = null; orderedFragments = WebXml.orderWebFragments(webXml, fragments, sContext);
以後則是把web-fragement.xml和web.xml合到一塊兒。app
/* Step 7. Apply global defaults Have to merge defaults before JSP conversion since defaults provide JSP servlet definition. */ webXml.merge(defaults); //merge全局web.xml,這裏是先放進去,後續自定義的會覆蓋
再向下走到merge應用自定義的web.xml中。ide
// Step 9. Apply merged web.xml to Context if (ok) { configureContext(webXml); }