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分析的主要内容,如果未能解决你的问题,请参考以下文章
tomcat加载web.xml的过程---StandardContextContextConfig源码分析
Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段