web.xml之与的区别与作用++ springMVC

  1. 下面两篇文章结合起看,应该很容易懂
  2. 先记录下自己用用spring mvc心得
  3. filter 可以接受一些参数。  init-param 的param-name 就是参数名  param-value就是参数值, 支持多个参数
    每一个 filter 都有一个 init 方法 ,可以再这个 方法中通过 getInitParamter("key"); key 就是 param-name的值,来获取对应的参数值
    
    常用的 就是 设置编码过滤器 , 例如 : encodingUTF-8

    Servlet specification:
    The load-on-startup element indicates that this servlet should be loaded (instantiated and have its init() called) on the startup of the web application. The optional contents of these element must be an integer indicating the order in which the servlet should be loaded. If the value is a negative integer, or the element is not present, the container is free to load the servlet whenever it chooses.   If the value is a positive integer or 0, the container must load and initialize the servlet as the application is deployed. The container must guarantee that servlets marked with lower integers are loaded before servlets marked with higher integers. The container may choose the order of loading of servlets with the same load-on-start-up value.

    翻译过来的意思大致如下:
    1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

    2)它的值必须是一个整数,表示servlet应该被载入的顺序

    2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

    3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

    4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

    5)当值相同时,容器就会自己选择顺序来加载。

    所以,x,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。



  4. DispatcherServlet
    org.springframework.web.servlet.DispatcherServlet

    contextConfigLocation
    /WEB-INF/spring/mvc*.xml

    1



  5. DispatcherServlet
    *.do



            contextConfigLocation
            /WEB-INF/spring/app*.xml
       

       
           
                org.springframework.web.context.ContextLoaderListener
           

       


  6.    
           
                com.mt.util.common.SpringContextHelper
           

       

  7. 第一篇

  8. <context-param>  
  9. <param-name>contextConfigLocationparam-name>  
  10. <param-value>contextConfigLocationValue>param-value>  
  11. context-param>  

作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。

param-name 设定上下文的参数名称。必须是唯一名称

param-value 设定的参数名称的值

  • 初始化过程:
  1. 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点
  2. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
  3. 接着容器会将读取到转化为键值对,并交给ServletContext。
  4. 容器创建中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
  5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
  6. 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。

由上面的初始化过程可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servlet

  •  如何使用
  1. 页面中

    ${initParam.contextConfigLocation}

  2. Servlet中
    String paramValue=getServletContext().getInitParameter("contextConfigLocation")
第二篇

的作用:
web.xml的配置中配置作用
1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点:
2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.
3.容器将转化为键值对,并交给ServletContext.
4.容器创建中的类实例,即创建监听.
5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的键");
6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.
换句话说,这个时候,你对中的键值做的操作,将在你的WEB项目完全启动之前被执行.
7.举例.你可能想在项目启动之前就打开数据库.
那么这里就可以在中设置数据库的连接方式,在监听类中初始化数据库的连接.
8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.

如:
[html]  view plain  copy
  1.   
  2. <context-param>  
  3.     <param-name>contextConfigLocationparam-name>  
  4.     <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-INF/jason-servlet.xmlparam-value>  
  5. context-param>  
  6. <listener>  
  7.     <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
  8. listener>  

[java]  view plain  copy
  1. public class SysListener extends HttpServlet implements ServletContextListener {private static final Log logger = LogFactory.getLog(SysListener.class);public void contextDestroyed(ServletContextEvent sce) {   //用于在容器关闭时,操作  
  2. }//用于在容器开启时,操作public void contextInitialized(ServletContextEvent sce) {  
  3.    String rootpath = sce.getServletContext().getRealPath("/");  
  4.    System.out.println("-------------rootPath:"+rootpath);   if (rootpath != null) {  
  5.     rootpath = rootpath.replaceAll("\\\\", "/");  
  6.    } else {  
  7.     rootpath = "/";  
  8.    }  
  9.    if (!rootpath.endsWith("/")) {  
  10.     rootpath = rootpath + "/";  
  11.    }  
  12.    Constant.ROOTPATH = rootpath;  
  13.    logger.info("Application Run Path:" + rootpath);  
  14.    String urlrewrtie = sce.getServletContext().getInitParameter("urlrewrite");  
  15.    boolean burlrewrtie = false;  
  16.    if (urlrewrtie != null) {  
  17.     burlrewrtie = Boolean.parseBoolean(urlrewrtie);  
  18.    }  
  19.    Constant.USE_URL_REWRITE = burlrewrtie;  
  20.    logger.info("Use Urlrewrite:" + burlrewrtie);  
  21.    其它略之....    }}  
  22.    /*最终输出 
  23.    -------------rootPath:D:\tomcat_bbs\webapps\BBSCS_8_0_3\ 
  24.    2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]Application Run Path:D:/tomcat_bbs/webapps/BBSCS_8_0_3/ 
  25.    2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]Use Urlrewrite:true 
  26.    2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]Use Cluster:false 
  27.    2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]SERVLET MAPPING:*.bbscs 
  28.    2009-06-09 21:51:46,573 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]Post Storage Mode:1 
  29.    */  

context-param和init-param区别
web.xml里面可以定义两种参数:
(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:
[html]  view plain  copy
  1. <context-param>  
  2.            <param-name>context/paramparam-name>  
  3.            <param-value>avalible during applicationparam-value>  
  4. context-param>  

(2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:
[html]  view plain  copy
  1. <servlet>  
  2.     <servlet-name>MainServletservlet-name>  
  3.     <servlet-class>com.wes.controller.MainServletservlet-class>  
  4.     <init-param>  
  5.        <param-name>param1param-name>  
  6.        <param-value>avalible in servlet init()param-value>  
  7.     init-param>  
  8.     <load-on-startup>0load-on-startup>  
  9. servlet>  

在servlet中可以通过代码分别取用:
[java]  view plain  copy
  1. package com.wes.controller;import javax.servlet.ServletException;  
  2. import javax.servlet.http.HttpServlet;public class MainServlet extends HttpServlet ...{    public MainServlet() ...{  
  3.         super();  
  4.      }  
  5.     public void init() throws ServletException ...{  
  6.          System.out.println("下面的两个参数param1是在servlet中存放的");  
  7.          System.out.println(this.getInitParameter("param1"));  
  8.          System.out.println("下面的参数是存放在servletcontext中的");  
  9.         System.out.println(getServletContext().getInitParameter("context/param"));  
  10.       }  
  11. }  

第一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得.

你可能感兴趣的:(web.xml)