目录
web.xml详解 借鉴 + 整理
默认加载 顺训:context-param -- > listener(Spring) --> filter --> servlet(Spring-mvc)
,同一级别则按照在配置文件(mapping)中出现的先后顺序来加载
1、上一个 ssm中的基本 最简配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
metadata-complete="true" version="2.5">
<!-- Spring入口-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 全局初始化参数 加载到ServletContext当中-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/spring/**/spring-*.xml
classpath:applicationContext.xml
classpath:applicationContext-activiti.xml
classpath:applicationContext-mybatis.xml
classpath:applicationContext-solr.xml
classpath:applicationContext-task.xml
</param-value>
</context-param>
<!-- springMVC入口-->
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- session 120分钟 -->
<session-config>
<session-timeout>120</session-timeout>
</session-config>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/pages/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/pages/error.jsp</location>
</error-page>
</web-app>
2、web.xml加载过程
1、启动WEB项目的时候,容器首先会去读取web.xml配置文件中的两个节点:<listener> </listener>和<context-param> </context-param>
2、紧接着,容器创建一个ServletContext(application),这个web项目的所有部分都将共享这个上下文。容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext。
3、容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有初始化方法,启动Web应用时,系统调用Listener的该方法 contextInitialized(ServletContextEvent args),在这个方法中获得:ServletContext application =ServletContextEvent.getServletContext();
context-param的值= application.getInitParameter("context-param的键");
4、接着,容器会读取<filter></filter>,根据指定的类路径来实例化过滤器。
5、以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。
3、Servlet介绍
3.1、Servlet介绍
Servlet通常称为服务端小程序,是服务端的程序,用于处理及响应客户的请求。Servlet是一个特殊的Java类,创建Servlet类自动继承HttpServlet。客户端通常只有GET和POST两种请求方式,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。大部分时候,Servlet对于所有的请求响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求。另外HttpServlet有两个方法:
init(ServletConfig config):创建Servlet实例时,调用该方法初始化Servlet资源。
destory():销毁Servlet实例时,自动调用该方法回收资源。
3.2、Servlet的生命周期
创建Servlet实例有两个时机:
a web应用启动时立即创建Servlet实例,即<load-on-start>1</laod-on-start> 比如springMVC
b 每个Servlet的运行都遵循如下生命周期:
(1)创建Servlet实例。
(2)Web容器调用Servlet的init()方法,对Servlet进行初始化。
(3)Servlet初始化之后,将一直存在与容器之中,用于响应客户端请求,如果客户端发送GET请求,容器调用Servlet的doGet()方法处理并响应请求;如果客户端发送POST请求,容器调用Servlet的doPost()方法处理并响应请求。或者统一使用service()方法处理来响应用户请求。
(4)Web容器决定销毁Servlet时,先调用Servlet的destory()方法,通常在关闭Web应用时销毁Servlet实例。