[toc]
昨天下午接到阿里java研发的电话面试,被问到了这个,说的不大清楚。其实就是自己本身也不是很清晰,所以回来学习整理了一下。
首先,肯定不是按照配置的先后顺序进行加载的。
整体加载顺序
启动一个web工程的时候,web容器会去读它的配置文件web.xml,根据web.xml的配置按顺序加载。也可以简单理解成就是web.xml文件配置内容的加载顺序。
- 首先就是读web.xml配置文件;
- 紧接着web容器会为这个工程创建一个servlet上下文ServletContext,就是那个被全局共享的域;
- 然后当然是要读入通过< context-param >配置的初始化参数,交给servletcontext,以备后面初始化filter和servlet使用;
- 容器创建< listener >中的类实例,创建监听器;
- 加载filter;
- 加载servlet;
想一下也不难想到,先行加载的都会后面加载可能要用到的,比如servletcontext中的初始化参数,再比如给一些或者全部servlet配的filter。
servlet的加载顺序
load-on-startup元素在web启动时决定了servlet加载的顺序。
我们可以把这个值配置成一个整数,一般就0-5。整数值越小,web容器就越先加载这个servlet,按顺序逐个加载。
如果把这个值配成0或正整数,web容器就会在启动时就加载这个servlet,如果没有配置,或者配成负整数,web容器要等到这个servlet第一次被调用时才加载它。
filter一般都是web容器启动时即加载的。
web.xml中常见的配置内容举例
1、web-app中的配置
discription 是对站台的描述
display-name 定义站台的名称
distributable 是指定该站台是否可分布式处理
context-param 用来设定web站台的环境参数,它包含两个子元素:
param-name用来指定参数的名称
param-value 用来设定参数值
2、filter
<filter>
<filter-name>setCharacterEncoding</filter-name>
<filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、servlet
类型filter的配置
4、首页,欢迎页面
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcom-file-list>
5、用来处理http错误响应码和异常的页面
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exception.jsp</location>
</error-page>
在网上看了几篇博文,都是转载的,也没有出处,只能感谢原作者(们)了。