在使用各种框架后,有时会发现不了了错误处在哪里,了解Servlet的初始化过程(也可以说是web.xml的初始化吧),也许对你对于框架的理解与报错的原因理解会有帮助
context-param >> listener >> filter >> servlet
初始化过程:
1.在启动WEB项目时,容器(Tomcat)会读取web.xml配置文件中的两个节点<listenner>
和<context-param>
。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext.xml</param-value>
</context-param>
2.接着容器会创建一个ServletContext
,即最为神秘的应用上下文,意思就是应用范围是整个WEB项目都可以使用这个上下文去进去一些操作。
这就得说到<context-param>
中的value代表的文件,在这个例子中,此文件定义了一些面向整个WEB项目的相关配置。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
实际上,就是读取了<context-param>
作为键值交给了ServletContext。
3.容器会开始创建监听器,即开始实例化<listener>
,这里在Spring框架中,有时会出现报错java.lang.ClassNotFoundException,大部分时候,是由于你的jar包冲突了。
4.在监听器中,会存在一个contextInitialized(ServletContext event)
方法,通过event.getServletContext().getInitParameter(context ConfigLocation)
,去获取<context-param>
的值。
5.之后,初始化标示的过滤器<filter>
<filter>
<filter-name>Spring character encoding filter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Spring character encoding filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6.最后,才到初始化定义好的Servlet,以name作为桥梁,把<servlet>
与<servlet-mapping>
连接起来。通过规定的路径,把发往这个路径的请求交给对应的Servlet去处理。