web.xml的简单解释以及Hello1中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>来创建监听,

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

⑥如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。

二、标签

①<web-app></web-app>

<web-app></web-app>是部署描述的根元素,该元素含23个子元素。

②<display-name></display-name> 

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

③<distributable/>

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

④<context-param></context-param>

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

⑤<session-config></session-config>

<session-config> 用于设置容器的session参数。

⑥<filter></filter>

Filter可认为是Servlet的一种“变种”,它主要用于对用户请求(HttpServletRequest)进行预处理,也可以对服务器响应(HttpServletResponse)进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

⑦<listener></listener>

Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。

⑧<servlet></servlet>

Servlet通常称为服务端小程序,是服务端的程序,用于处理及响应客户的请求。

⑨<welcome-file-list></welcome-file-list>

<welcome-file-list>包含一个子元素<welcome-file>,<welcome-file>用来指定首页文件名称。<welcome-file-list>元素可以包含一个或多个<welcome-file>子元素。

三、example(web.xml in Hello1)

 

<?xml version="1.0" encoding="UTF-8"?>  //注明版本,编码方式 //根元素 <web-app version="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"> //上下文参数     <context-param>         <param-name>javax.faces.PROJECT_STAGE</param-name>  //参数名         <param-value>Development</param-value>  //参数值     </context-param> //服务端的小程序,处理相应客户端的请求     <servlet>         <servlet-name>Faces Servlet</servlet-name>   //名称         <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>  //类         <load-on-startup>1</load-on-startup>    //表示容器在启动时加载这个servlet     </servlet>     <servlet-mapping>         <servlet-name>Faces Servlet</servlet-name>    //一定与<servlet>中的相同         <url-pattern>*.xhtml</url-pattern>      //是要在浏览器中输入的url值     </servlet-mapping>     <session-config>         <session-timeout>             30                    //session超时时间为30分钟         </session-timeout>     </session-config>     <welcome-file-list>         <welcome-file>index.xhtml</welcome-file> //欢迎页     </welcome-file-list> </web-app>
上一篇:hello2 source analysis


下一篇:hello2 源码分析