java web项目的部署描述文件--web.xml

java学习记录(11)

java web项目的部署描述文件–web.xml
提纲
  1. web.xml是什么
  2. java web项目的启动过程
  3. web.xml中的一些标签的含义
  4. 项目中的web.xml的解释
1 web.xml是什么

   java web项目用部署描述文件来决定URLS与servlets的映射,哪些URLS需要进行验证等。这个部署描述文件是web.xml,它在java web项目打包war下面的WEB-INF目录下面,是java web项目中serverlet标准的一个部分。

2 java web项目的启动过程

   web.xml有多项标签,在其加载的过程中顺序依次为:context-param >> listener >> fileter >> servlet​。(同类多个节点以出现顺序依次加载)
1. ​web.xml先读取context-param和listener这两种节点;
2. 然后容器创建一个ServletContext(上下文),应用于整个项目;
​3. 容器会将读取到的context-param转化为键值对并存入servletContext;
​4. 根据listener创建监听;
5. 容器会读取,根据指定的类路径来实例化过滤器;
6. 此时项目初始化完成;
7. 在发起第一次请求是,servlet节点才会被加载实例化。​

3 web.xml中的一些标签的含义
(1) XML文档有效性检查

   不同的版本的web.xml文档书写有不同的格式。下面是3.1版本的部署描述符的书写格式。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>
(2)display-name

   定义了web相应的名称,在把war文件放入到tomcat中在manager中就可以查看到对应的web名称。

<display-name>sshTest</display-name>
(3)context-param

   1 context-param 定义了程序运行的上下文的一些参数,这里定义的是applicationContext.xml的文件路径。

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

   2 context-param值的获取,例如上例中的contextConfigLocation,可以在aciton中通过ServletActionContext来获取相关的参数。

String param_name=ServletActionContext.getServletContext().getInitParameter("contextConfigLocation");
        System.out.println(param_name);

   3 context-param的使用

什么情况下使用,为什么使用context-param:
比如:定义一个管理员email地址用来从程序发送错误,或者与你整个应用程序有关的其他设置。使用自己定义的设置文件需要额外的代码和管理;直接在你的程序中使用硬编码(Hard-coding)参数值会给你之后修改程序带来麻烦,更困难的是,要根据不同的部署使用不同的设置;通过这种办法,可以让其他开发人员更容易找到相关的参数,因为它是一个用于设置这种参数的标准位置。
   4 spring的配置
配置Spring,必须需要listener,而context-param>可有可无,如果在web.xml中不写context-param>配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:在param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔,比如在business-client工程中,我们采用了自定义配置方式,context-param配置如下:

<!-- spring -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
(4)listener

listener 为web应用程序定义监听器,监听器用来监听各种事件,比如:application和session事件,所有的监听器按照相同的方式定义,功能取决去它们各自实现的接口,常用的Web事件接口有如下几个:
1) ServletContextListener:用于监听Web应用的启动和关闭;
2) ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变;
3) ServletRequestListener:用于监听用户的请求;
ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变;
4) HttpSessionListener:用于监听用户session的开始和结束;
5) HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。
listener主要用于监听Web应用事件,其中有两个比较重要的WEB应用事件:应用的启动和停止(starting up or shutting down)和Session的创建和失效(created or destroyed)。应用启动事件发生在应用第一次被Servlet容器装载和启动的时候;停止事件发生在Web应用停止的时候。Session创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候。为了使用这些Web应用事件做些有用的事情,我们必须创建和使用一些特殊的“监听类”。它们是实现了以下两个接口中任何一个接口的简单java类:javax.servlet.ServletContextListener或javax.servlet.http.HttpSessionListener,如果想让你的类监听应用的启动和停止事件,你就得实现ServletContextListener接口;想让你的类去监听Session的创建和失效事件,那你就得实现HttpSessionListener接口。

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 
(5)filter
<!-- struts2 -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
(6)welcome-file-list

   初始页,包含多个以此尝试

<welcome-file-list>
    <!-- /WEB-INF/jsp/login.jsp -->

        <welcome-file>/index.html</welcome-file>
    </welcome-file-list>

参考链接

1 web.xml不同版本相应头
2 web.xml描述符
3 web.xml详解

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值