javaweb项目中的web.xml

Web.xml详解:html

1.web.xml加载过程(步骤)java

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

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

2. 紧接着,容器建立一个ServletContext(application),这个WEB项目全部部分都将共享这个上下文。数据库

3. 容器以<context-param></context-param>的name做为键,value做为值,将其转化为键值对,存入ServletContext。app

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

context-param的值就是application.getInitParameter("context-param的键");获得这个context-param的值以后,你就能够作一些操做了。分布式

 

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

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

7. 以上都是在WEB项目尚未彻底启动起来的时候就已经完成了的工做。若是系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,并且通常不会被容器销毁,它能够服务于多个用户的请求。因此,Servlet的初始化都要比上面提到的那几个要迟。

8. 总的来讲,web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>。其中,若是web.xml中出现了相同的元素,则按照在配置文件中出现的前后顺序来加载。

9. 对于某类元素而言,与它们出现的顺序是有关的。以<filter>为例,web.xml中固然能够定义多个<filter>,与<filter>相关的一个元素是<filter-mapping>,注意,对于拥有相同<filter-name>的<filter>和<filter-mapping>元素而言,<filter-mapping>必须出如今<filter>以后,不然当解析到<filter-mapping>时,它所对应的<filter-name>还未定义。web容器启动初始化每一个<filter>时,按照<filter>出现的顺序来初始化的,当请求资源匹配多个<filter-mapping>时,<filter>拦截资源是按照<filter-mapping>元素出现的顺序来依次调用doFilter()方法的。<servlet>同<filter>相似,此处再也不赘述。

 

2.web.xml标签详解

1. XML文档有效性检查这段代码指定文件类型定义(DTD),能够经过它检查XML文档的有效性。下面显示的<!DOCTYPE>元素有几个特性,这些特性告诉咱们关于DTD的信息: 

 

  1.  web-app定义该文档(部署描述符,不是DTD文件)的根元素 
  2.  PUBLIC意味着DTD文件能够被公开使用 
  3.  -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”意味着DTD由Sun Microsystems, Inc.维护。该信息也表示它描述的文档类型是DTD Web Application 2.3,并且DTD是用英文书写的。 
  4.  URL"http://java.sun.com/dtd/web-app_2_3.dtd"表示D文件的位置。

 

2. <web-app></web-app>

部署描述符的根元素是<web-app>。DTD文件规定<web-app>元素的子元素的语法以下:

正如您所看到的,这个元素含有23个子元素,并且子元素都是可选的。问号(?)表示子元素是可选的,并且只能出现一次。星号(*)表示子元素可在部署描述符中出现零次或屡次。有些子元素还能够有它们本身的子元素。web.xml文件中<web-app>元素声明的是下面每一个子元素的声明。下面讲述部署描述符中可能包含的全部子元素。

注意:在Servlet 2.3中,子元素必须按照DTD文件语法描述中指定的顺序出现。好比:若是部署描述符中的<web-app>元素有<servlet>和<servlet-mapping>两个子元素,则<servlet>子元素必须出如今<servlet-mapping>子元素以前。在Servlet2.4中,顺序并不重要。

 

3. <display-name></display-name>

 

<display-name>test-hwp-web-application</display-name>定义了web应用的名称,能够在http://localhost:8080/manager/html中显示。

4. <distributable/>

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

5. <context-param></context-param>

<!--****************************上下文初始化参数***************************-->  
<context-param>  
    <param-name>webAppRootKey</param-name>  
    <param-value>business.root</param-value>  
</context-param>  
<!-- spring config -->  
<context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>/WEB-INF/spring-configuration/*.xml</param-value>  
</context-param> 

5.1<context-param>解释:

<context-param>元素含有一对参数名和参数值,用做应用的Servlet上下文初始化参数,参数名在整个Web应用中必须是唯一的,在web应用的整个生命周期中上下文初始化参数都存在,任意的Servlet和jsp均可以随时随地访问它。<param-name>子元素包含有参数名,而<param-value>子元素包含的是参数值。做为选择,可用<description>子元素来描述参数。

5.2 什么状况下使用,为何使用<context-param>:

好比:定义一个管理员email地址用来从程序发送错误,或者与你整个应用程序有关的其余设置。使用本身定义的设置文件须要额外的代码和管理;直接在你的程序中使用硬编码(Hard-coding)参数值会给你以后修改程序带来麻烦,更困难的是,要根据不一样的部署使用不一样的设置;经过这种办法,可让其余开发人员更容易找到相关的参数,由于它是一个用于设置这种参数的标准位置。

5.3 Spring配置文件:

配置Spring,必须须要<listener>,而<context-param>无关紧要,若是在web.xml中不写<context-param>配置信息,默认的路径是/WEB-INF/applicationontext.xml,在WEB-INF目录下建立的xml文件的名称必须是applicationContext.xml。若是是要自定义文件名能够在web.xml里加入contextConfigLocation这个context参数:在<param-value>
</param-value>里指定相应的xml文件名,若是有多个xml文件,能够写在一块儿并以“,”号分隔,好比在business-client工程中,咱们采用了自定义配置方式,<context-param>配置以下:
<!-- 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>

<welcome-file-list>包含一个子元素<welcome-file>,<welcome-file>用来指定首页文件名称。<welcome-file-list>元素能够包含一个或多个<welcome-file>子元素。若是在第一个<welcome-file>元素中没有找到指定的文件,Web容器就会尝试显示第二个,以此类推。

相关文章
相关标签/搜索