web.xml概述

一,web.xml的加载过程

简单说一下,web.xml的加载过程。当我们启动一个WEB项目容器时,容器包括(JBoss,Tomcat等)。首先会去读取web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常的被启动起来。

  启动WEB项目的时候,容器首先会去读取web.xml配置文件中的两个节点:<listener> </listener>和<context-param> </context-param>

紧接着,容器创建一个ServletContext(application),这个web项目的所有部分都将共享这个上下文。容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext。  

  容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有初始化方法,启动Web应用时,系统调用Listener的该方法 contextInitialized(ServletContextEvent args),在这个方法中获得:

  ServletContext application =ServletContextEvent.getServletContext();

  context-param的值= application.getInitParameter("context-param的键");

  得到这个context-param的值之后,你就可以做一些操作了。

  举例:你可能想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用前释放资源。比如:说数据库连接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统调用Listener的该方法。

  接着,容器会读取<filter></filter>,根据指定的类路径来实例化过滤器。

  以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。总的来说,web.xml的加载顺序是: <context-param>-> <listener> -> <filter> -> <servlet>。其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。

 

二,web.xml标签详解

1,<web-app></web-app>

  是部署描述的根元素,每一个xml都有且仅有一个根元素,它包含23个子元素,在servlet 2.3中,子元素的顺序需要按约束文件中的规定来出现,比如<servlet>元素必须在<servlet-mapping>之前。在往后版本中,顺序并不重要。

2,<display-name></display-name>

  定义web应用的名称。如<display-name>showlan</dispaly-name>

3,<distributable/>

  可以使用distributable元素来告诉servlet/JSP容器,web容器中部署的应用程序适合在分布式的环境下运行。

4,<context-param></context-param>

  该元素含有一对参数名和参数值,用作应用的Servlet上下文初始化参数,参数名在整个项目中必须是唯一的,在web应用的整个生命周期中上下文初始化参数始终存在,任意的servlet和jsp都可以随时随地的访问它

 <param-name>是初始化参数名,<param-value>是初始化参数值,作为选择,可用<description>子元素来描述参数。

配置spring,必须需要<linstener>,而<context-param>可有可无,

如果不写<context-param>的配置信息,默认路径是/WEB-INF/applicationContext.xml,在WEB-INF中创建的文件必须叫做

applicationContext.xml。

如果要自定义文件名,可以在<context-param>的<param-name>中添加contextConfigLocation这个参数,在<param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔,如图所示:

配置在同一个容器中的多个web项目,要配置不同的webAppRootKey,web.xml文件中最好定义webAppRootKey参数,如果不定义,将会缺省为“webapp.root”,为防止log4j配置冲突,每个项目配置不同的webAppRootKey。如下:

  

  当然也不能重复,否则报类似下面的错误:

  Web app root system property already set to different value: 'webapp.root' = [/home/user/tomcat/webapps/project1/] instead of   [/home/user/tomcat/webapps/project2/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

5,<session-config></session-config>

  用于设置容器的session参数。

<session-timeout>用于指定session的失效时间,默认为30分钟,当值为零或是整数时,则表示永远都不会超时。

6,<filter></filter>见我其他博客

7,<listener></listener>见我的博客,这里不在阐述。

8,<servlet></servlet>

  servlet介绍:

  他可以看做运行在服务器上的一个小程序,用于处理及响应客户端请求。

  servlet是一个特殊的java类,创建servlet类自动继承HttpServlet。

  客户端只有GET和POST两种请求方式,servlet为了响应这两种请求方式必须重写doGet()和doPost()

  servlet对于所有的请求响应一视同仁,所以只需重写service()方法即可

  另外两种方法:init():初始化servlet的资源。

                           和destroy():销毁servlet时,自动调用该方法回收资源;

servlet生命周期

init()方法

service()方法,doGet,doPost方法

destroy()方法

servlet的配置

为了让servlet响应客户端的请求,还必须将servlet配置在web应用中。

servlet3.0开始,有两种方式配置servlet:

(1)基于注解的方式进行配置:@webservlet

(2)在web.xml文件中进行配置。

我们这里只介绍第二种方法,在web.xml中进行配置:

  

 <servlet>用来声明一个Servlet

  <icon>、<display-name>和<description>元素的用法和<filter>的用法相同。 

猜你喜欢

转载自blog.csdn.net/qq_38793958/article/details/81537512