<context-param>与<init-param>

<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.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.

如:

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

又如: --->自定义context-param,且自定义listener来获取这些信息

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

context-param和init-param区别

web.xml里面可以定义两种参数:
(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:

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中配置如下:

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中可以通过代码分别取用:

 1 package com.wes.controller;
 2 import javax.servlet.ServletException;
 3 import javax.servlet.http.HttpServlet;
 4 public class MainServlet extends HttpServlet ...
 5 {
 6     public MainServlet() ...
 7     {
 8         super();
 9     }
10     public void init() throws ServletException ...
11     {
12         System.out.println("下面的两个参数param1是在servlet中存放的");
13         System.out.println(this.getInitParameter("param1"));
14         System.out.println("下面的参数是存放在servletcontext中的");
15         System.out.println(getServletContext().getInitParameter("context/param"));
16     }
17 }

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

时间: 2024-08-05 11:09:59

<context-param>与<init-param>的相关文章

struts2的配置文件中的&lt;param name="allowedTypes"&gt;&lt;/param&gt;

<action name="upload" class="action.MulUpload"> <!-- 设置文件的类型 --> <interceptor-ref name="fileUpload"> <param name="allowedTypes">image/JPEG,image/JPG</param> </interceptor-ref> <

Spring MVC注解配置结合Hibernate的入门教程及其代码实例

原文:Spring MVC注解配置结合Hibernate的入门教程及其代码实例 源代码下载地址:http://www.zuidaima.com/share/1787210045197312.htm 1.概述 本文旨在搭建Spring MVC+Hibernate开发框架,通过一个简单的demo讲解Spring MVC的相关配置文件,以及通过注解方式实现简单功能. 开发框架:Spring+Spring MVC+Hibernate(Spring所用的版本为3.0.5). 数据库:MySQL(数据库名称

iOS 开发之JS与Native交互

最近项目中用到了JS与OC交互的,所以我就来讲一下JS与OC交互的详细过程,以及在做项目的时候遇到的问题,跟大家分享一下. 1:关于交互实现方式的选择. 网上讨论比较多的有一个第三方库WebViewJavascriptBridge,个人不建议用,因为本身我们在做H5交互的时候就是给前端增加了工作量,而这种处理方式就需要前端要配置两套代码,一套给安卓,一套给iOS,而且不利于调试.所以我最后选择用系统的JavaScriptCore框架,JavaScriptzCore内部有五个框架,分别是: #im

[Object]面向对象编程(自己总结版)

[Object]面向对象编程(自己总结版) 2014-06-06 面向对象编程 感受:原理javascript也可以用完全面向对象的方式编程,兴奋得一个晚上都没睡好觉. 有种越深入越想编程的状态,有种上瘾的快感. 1,面向对象方式编程 Js代码   function Aa(){ //属性设置 this.property1:value1,//例如this.nameinput = $("input['name'=name]"); this.property2:value2, this.pr

根据C# 事件思想来实现 php 事件

事件定义 当我们使用委托场景时,我们很希望有这样两个角色出现:广播者和订阅者.我们需要这两个角色来实现订阅和广播这种很常见的场景. 广播者这个角色应该有这样的功能:包括一个委托字段,通过调用委托来发出广播.而订阅者应该有这样的功能:可以通过调用 += 和 -= 来决定何时开始或停止订阅. 事件就是描述这种场景模式的一个词.事件是委托的一个子集,为了满足“广播/订阅”模式的需求而生. C#中事件简单实现 using System; namespace ConsoleApplication2 { c

在0~N个数字中,取指定个数的不重复数字,要求这些数字的和为指定值,求所有结果

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApp1 { 7 class Program { 8 static void Main(string[] args) { 9 10 // 防止出现随机值无法组合 11 while (ResDic.Count == 0) { 12 13 Con = 10; 14 // 初

Caffe源码-Solver类

Solver类简介 Net类中实现了网络的前向/反向计算和参数更新,而Solver类中则是对此进行进一步封装,包含可用于逐次训练网络的Step()函数,和用于求解网络的优化解的Solve()函数,同时还实现了一些存储.读取网络模型快照的接口函数. solver.cpp源码 template<typename Dtype> void Solver<Dtype>::SetActionFunction(ActionCallback func) { action_request_funct

jstl param url redirect import

import标签 import标签用来导入其他页面 属性: * url :引入页面的路径 * context :工程名 * var :将引入的页面保存到一个变量中 * scope :保存到一个作用域中. 代码: <c:import var="i" url="/jstl/forEach.jsp" context="/day13" scope="page"></c:import> ${ i } url标签:

jsp:&lt;c:redirect&gt; 和&lt;c:param&gt; 标签

redirect 标签使用来进行页面之间的重定向,它和传统 JSP 程序中的<jsp:redirect>标记功能相类似.param 标签是和 redirect 一起使用的,它用来进行参数值的传递.redirect 标签使用的格式如下: <c:redirect url="url" [context="context"] />在 redirect 标签体中指定 param 参数的使用格式如下: <c:redirect url="u

linux kernel with param

Linux kernel support pass param to kernel, this params can be assigned at load time by insmod or modprobe.  or later read from /etc/modprobe.conf file. There are two macro : module_param and module_param_array, To declare an param or array param ,use