Web.xml
简单介绍
当启动一个web项目时,容器(包括Tomcat)首先会读取项目web.xml配置文件中的配置。
加载过程
-
读取节点
<context-param>
以及<listener>
-
创建ServletContext,web项目的所有部分共享此上下文
-
将
<context-param>
中存储的键值对存入servletContext -
创建
<listener>
中的类实例,创建监听 -
读取
<filter>
,根据指定的类路径来实例化过滤器
以上都是web项目还没有完全启动起来时就完成的工作,总的来说,web.xml的加载顺序是<context-param>
-<listener>
-<filter>
-<servlet>
主要标签
context-param
内部有一堆参数名和参数值的存在,用作应用的servlet上下文初始化参数,参数名在整个web应用中必须是唯一的,在web应用的整个生命周期中上下文初始化参数都存在,任意的servlet和jsp都可以随时访问他。
访问:ServletContext application = ServletContextEvent.getServletContext()
获取context-param的值:String value = application.getInitParam("contxt-param的key")
在Spring中的运用
<!-- spring config -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-configuration/*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
通过定义contextConfigLocation通知解析xml的类spring配置文件的位置
listener
定义
<listener>
为web应用定义监听器,用于监听各种事件。
常用的事件监听接口:
- ServletContextListener:用于监听web Application的启动和关闭
- ServletContextAttributeListener:用于监听ServletContext的范围内属性的改变
- ServletRequestListener:用于监听请求
- ServletRequestAttributeListener:用于监听ServletRequest范围内属性的改变
- HttpSessionListener:用于监听用于session的开始和结束
- HttpSessionAtrributeListener:用于监听session内属性的改变
主要用于监听Web应用事件,其中有两个比较重要的事件:Application的启动和停止、Session的创建和失效。
他们是实现了以下两个接口中任何一个接口的java类:javax.servlet.ServletContextListener或javax.servlet.http.HttpSessionListener
listener配置
配置listener只要向web应用注册listener实现类即可。
- 使用@WebListener修饰Listener的实现类即可
- 在web.xml中使用
<listener>
配置
filter
定义
filter被认作是servlet的“加强版”,主要用于对用户request进行预处理,也可以对Response进行后处理,是个典型的 处理链。使用Filter的完整流程是:Filter对用户请求进行预处理,接着请求HttpServletRequest交给Servlet进行处理并生成响应,最后Filter在对服务器响应的HttpServletResponse进行后处理,Filter也可以通过初始化参数,且获得Filter的初始化参数的方法则使用FilterConfig的getInitParamter()
Filter的实现
必须实现javax.servlet.Filter接口,他定义了三个方法:
-
void init(FilterConfig filterConfig):用于Filter的创建
-
void destory():用于filter销毁前,完成对某些资源的回收
-
void doFilter(ServletRequet request,ServletResponse response,FilterChain chain):实现过滤功能的核心方法
Filter的配置
- 在Filter类中使用Annotation进行配置
- 在web.xml文件中通过配置文件进行配置
servlet
定义
Servlet通常被称为 服务端小程序。客户端通常只用Get和Post两种请求,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。大部分时候Servlet对所有请求的响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求。
serlvet配置
- 在Servlet类中使用@WebServlet注解进行配置
- 在web.xml文件中进行配置
用web.xml配置Servlet,需要配置<servlet>
和<serlvet-mapping>
。<servlet>
用于声明一个Servlet。<init-param>
元素与<context-param>
元素的用法相同。访问Servlet配置参数通过ServletConfig对象来完成
serlvet-mapping
<servlet-mapping>
含有<servlet-name>
和<url-pattern>
<servlet-name>
:Servlet的名字,唯一性和一致性,与<servlet>
元素中声明的名字一致。<url-pattern>
:指定相对于Servlet的URL的路径。该路径相对于web应用程序上下文的根路径。<servlet-mapping>
将URL模式映射到某个Servlet,即该Servlet处理的URL。