Tomcat 加载中项目
Tomcat 加载项目的步骤:
1.第一时间tomcat回去查找Service xml文件用Dom去解析得到一些系统参数 如端口号之类的。
2.Tomcat启动时classloader开始工作 classloader记载的顺序是
1.最先是
4.
6.
8.
10.$CATALINA_BASE/shared/lib下的jar文件。
11.各自具体的webapp /WEB-INF/classes下的class文件。
12.各自具体的webapp /WEB-INF/lib下的jar文件。
3.通过寻找web.xml中去执行相应的doaction 方法 进而去 处理相应的业务方法
Spring 中通过配置web .xml 中的contextConfigLocation来装载配置文件 配置方法
在web.xml里配置Listener
xml 代码如下:
org.springframework.web.context.ContextLoaderListener listener-class >
如果在web.xml里给该Listener指定要加载的xml,如:
xml代码如下:
contextConfigLocation
classpath:applicationContext.xml
则会去加载相应的xml,而不会去加载/WEB-INF/下的applicationContext.xml。
但是,如果没有指定的话,默认会去/WEB-INF/下加载applicationContext.xml。
深入研究contextConfigLocation 我们会发现
这一个listener,我首先就会想contextConfigLocation这个一定能在ContextLoaderListener这个类当中找到,打开了源码,这个listener是实现了ServletContextListener这个接口的,这个接口只有两个方法:
1.public interface ServletContextListener
2. extends EventListener
3.{
4.
5. public abstract void contextInitialized(ServletContextEvent servletcontextevent);
6.
7. public abstract void contextDestroyed(ServletContextEvent servletcontextevent);
8.}
而且它是继承了EventListener这个接口 回头看下
ContextLoaderListener这个类的方法,contextInitialized方法是用来初始化上下文的:这个方法返回了一个ContextLoader实例,进入到ContextLoader类中ConfigurableWebApplicationContext设置了从servletContext获取到的参数的值,再进入ConfigurableWebApplicationContext的代码中,它只是一个接口,进入StaticWebApplicationContext的setConfigLocation方法spring使用BeanUtils来初始化contextClass这个类实例这里使用了反射通过反射得到contextClass的构造方法 最终猜测:
通过Properties的getProperty方法得到WebApplicationContext 的实例