web.xml 详解

本文介绍了Web项目启动时容器如何加载web.xml配置文件的过程,并详细解释了各主要标签的功能,包括context-param、listener、filter、servlet等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://blog.youkuaiyun.com/believejava/article/details/43229361

一、加载的顺序

在启动WEB项目时,容器首先会读取web.xml的配置。当这项工作无误时,项目才会被启动。
加载web.xml的顺序如下:
1、context-param:将对应的值存入ServletContext,WEB项目所有部分都将共享这个上下文。
2、listener:根据配置的class类路径来创建监听,项目启动时系统调用对应的监听事件。
3、filter:指定的类路径来实例化过滤器。
4、Servlet:指定对应的Servlet类。在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。

二、主要标签详解

1、基本格式:

<?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"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
</web-app>

2、display-name:定义了web应用的名称。
3、context-param:用作应用的Servlet上下文初始化参数。

特点:
    整个项目唯一;
    存在项目的整个生命周期;
    任意的Servlet和jsp都可以随时随地访问;
    <!-- 定义项目的webAppRootKey,用于区分同一容器下多个项目 -->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>webapp.root</param-value>
    </context-param>

4、session-config:设置容器的session参数。

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

5、listener:为web应用程序定义监听器,监听器用来监听各种事件。监听器的方式定义相同,功能取决去它们各自实现的接口。

常用接口:   
    ServletContextListener:用于监听Web应用的启动和关闭;
    ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变;
    ServletRequestListener:用于监听用户的请求;
    ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变;
    HttpSessionListener:用于监听用户session的开始和结束;
    HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。
    <!-- Spring的log4j监听器 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

6、Filter:用于对用户请求request进行预处理,也可以对Response进行后处理,是个典型的处理链。

Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。创建方法:
    创建Filter处理类
    Web.xml文件中配置Filter
Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
    void init(FilterConfig config):用于完成Filter的初始化。FilteConfig用于访问Filter的配置信息。
    void destroy():用于Filter销毁前,完成某些资源的回收。

Filter:可包含filter-name、filter-class、init-param、filter-mapping等。

filter-name:用来定义过滤器的名称,该名称在整个程序中都必须唯一。
filter-class:元素指定过滤器类的完全限定的名称,即Filter的实现类。
init-param:为Filter配置参数。
filter-mapping:用来声明Web应用中的过滤器映射,过滤器被映射到一个servlet或一个URL模式。过滤是按照部署描述符的filter-mapping出现的顺序执行的。
    <!-- 字符集 过滤器 -->
    <filter>
        <filter-name>CharacterEncodingFilter</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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

7、Servlet:通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户的请求。

配置:
description:为Servlet指定一个文本描述。
display-name:为Servlet提供一个简短的名字被某些工具显示。
icon:为Servlet指定一个图标,在图形管理工具中表示该Servlet。
servlet-name:用来定义servlet的名称,该名称在整个应用中必须是惟一的。
servlet-class:用来指定servlet的完全限定的名称
jsp-file:用来指定应用中JSP文件的完整路径。这个完整路径必须由/开始。
load-on-startup:内容可以为空,或者是一个整数。这个值表示由Web容器载入内存的顺序。
servlet-mapping:将URL模式映射到某个Servlet,即该Servlet处理的URL。
    <!-- Spring view分发器 -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

8、welcome-file-list:用来指定首页文件名称,包含多个时会查找第一个,如果不存在则查找第二个。

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值