web.xml分析

Posted lidongsheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web.xml分析相关的知识,希望对你有一定的参考价值。

一:web.xml加载过程:

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

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

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

  ServletContext application =ServletContextEvent.getServletContext();

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

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

 

      4.读取<filter></filter>,根据指定的类路径来实例化过滤器;

      5.如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求;

二:web.xml标签详解:

     1.<context-param></context-param>

    元素含有一对参数名和参数值,用作应用的Servlet上下文初始化参数,参数名在整个Web应用中必须是惟一的,在web应用的整个生命周期中上下文初始化参数都存在,任意的Servlet和jsp都可以随时随地访问它;<context-param>可有可无,如果在web.xml中不写<context-param>配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:在<param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔;

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
classpath:表示告诉web容器去classpath(WEB-INF/classes和WEB-INF/lib)中去加载指定名称的配置文件,若是有同名文件,则只会加载一个。 
【classpath*:】此配置表示告诉web容器去classpath(WEB-INF/classes和WEB-INF/lib)中去加载指定名称的配置文件,若是有同名文件则会全部加载

context-param参数的applicationContext.xm是为了加载web程序需要加载的数据库等等配置

      2.<servlet></servlet>

      服务端的程序,用于处理及响应客户的请求;

     创建Servlet实例有两个时机:

     客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet;

     web应用启动时立即创建Servlet实例,即<load-on-start>1</laod-on-start>;

     每个Servlet的运行都遵循如下生命周期:

     

       (1)创建Servlet实例。

  (2)Web容器调用Servlet的init()方法,对Servlet进行初始化。

  (3)Servlet初始化之后,将一直存在与容器之中,用于响应客户端请求,如果客户端发送GET请求,容器调用Servlet的doGet()方法处理并响应请求;如果客户端发送POST请求,容器调用Servlet的doPost()方法处理并响应请求。或者统一使用service()方法处理来响应用户请求。

  (4)Web容器决定销毁Servlet时,先调用Servlet的destory()方法,通常在关闭Web应用时销毁Servlet实例。

      

配置Spring MVC,指定处理请求的Servlet,有两种方式:

  (1)默认查找MVC配置文件的地址是:/WEB-INF/${servletName}-servlet.xml。

  (2)可以通过修改配置文件的位置,需要在配置DispatcherServlet时指定MVC配置文件的位置。

 

路径经过编译后生成的文件都位于classes目录下,即这两个路径相当于类路径,在下面创建config文件夹(folder),创建自定义的xml配置文件即可。

 

ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,一般如:DAO层、Service层Bean;DispatcherServlet初始化的上下文加载的Bean是只对Spring MVC有效的Bean,如:Controller、HandlerMapping、HandlerAdapter等,该初始化上下文只加载Web相关组件。

 

以上是关于web.xml分析的主要内容,如果未能解决你的问题,请参考以下文章

web.xml分析

Web.xml分析

分析web.xml

关于Web.xml 在Hello1 项目中的分析

tomcat加载web.xml的过程---StandardContextContextConfig源码分析

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段