<context-param>与<init-param>的区别与作用

来源:互联网 发布:历代职官沿革史淘宝 编辑:程序博客网 时间:2024/06/06 07:46

看到一篇关于web.xm文件中标签的讲解,顺带还阐述了容器的工作流程,因此转载此,以供参考,原文地址:与的区别与作用

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

如:
[html] view plaincopy
  1. <!-- 加载spring的配置文件 -->  
  2. <context-param>  
  3.     <param-name>contextConfigLocation</param-name>  
  4.     <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-INF/jason-servlet.xml</param-value>  
  5. </context-param>  
  6. <listener>  
  7.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  8. </listener>  

[java] view plaincopy
  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 plaincopy
  1. <context-param>  
  2.            <param-name>context/param</param-name>  
  3.            <param-value>avalible during application</param-value>  
  4. </context-param>  

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

在servlet中可以通过代码分别取用:
[java] view plaincopy
  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")取得.
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上海小学借读一年级没有学籍怎么办 学历不高的我该怎么办 没学历的我该怎么办 物业达不到服务标准该怎么办 没有能力的人该怎么办 工作累了腰疼怎么办 机场来早了6小时怎么办 苏宁金融综合评分不足怎么办 苏宁金融秒拒怎么办 微盘账号忘记了怎么办 天府e税忘记密码怎么办 未成年在外面没地方住怎么办? 半框眼镜片掉了怎么办 选修差0.5个学分怎么办 脱产考博社保卡怎么办 幼儿上课不认真听讲怎么办 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办 被期刊网骗了怎么办? 缝针缝到神经上怎么办 单位有个事特别多的领导怎么办 网上申请公司核名核不下来怎么办 老公把小三晒朋友圈老婆该怎么办 小三怀孕不愿意打掉怎么办 小三怀孕了引产怎么办 小三发现小四小三发现小四后怎么办 七十岁老人肺癌还有小三样怎么办 留学出国学历公认证怎么办 学历认证报告弄丢了怎么办 想读大专没考上怎么办 学信网身份证被注册了怎么办 学信网手机号换了密保忘了怎么办 学信网手机号改了密保忘了怎么办