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.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.
如:
<!-- 加载spring的配置文件 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-
INF/jason-servlet.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
又如: --->自定义context-param,且自定义listener来获取这些信息
<context-param>
    <param-name>urlrewrite</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>cluster</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>servletmapping</param-name>
    <param-value>*.bbscs</param-value>
</context-param>
<context-param>
    <param-name>poststoragemode</param-name>
    <param-value>1</param-value>
</context-param>
<listener>
    <listener-class>com.laoer.bbscs.web.servlet.SysListener</listener-class>
</listener>
public class SysListenerextends HttpServlet implements ServletContextListener{
private static final Log logger = LogFactory.getLog(SysListener.class);
public voidcontextDestroyed(ServletContextEvent sce){
//用于在容器关闭时,操作
}
//用于在容器开启时,操作
public voidcontextInitialized(ServletContextEvent sce){
   String rootpath =sce.getServletContext().getRealPath("/");
   System.out.println("-------------rootPath:"+rootpath);
if (rootpath != null) {
    rootpath = rootpath.replaceAll("\\\\", "/");
   } else {
    rootpath = "/";
   }
   if (!rootpath.endsWith("/")) {
    rootpath = rootpath + "/";
   }
   Constant.ROOTPATH = rootpath;
   logger.info("Application Run Path:" + rootpath);
   String urlrewrtie =sce.getServletContext().getInitParameter("urlrewrite");
   boolean burlrewrtie = false;
   if (urlrewrtie != null) {
    burlrewrtie = Boolean.parseBoolean(urlrewrtie);
   }
   Constant.USE_URL_REWRITE = burlrewrtie;
   logger.info("Use Urlrewrite:" + burlrewrtie);
   其它略之....
}
}
   /*最终输出
   -------------rootPath:D:\tomcat_bbs\webapps\BBSCS_8_0_3\
   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/
   2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Use Urlrewrite:true
   2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Use Cluster:false
   2009-06-09 21:51:46,526 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
SERVLET MAPPING:*.bbscs
   2009-06-09 21:51:46,573 [com.laoer.bbscs.web.servlet.SysListener]-[INFO]
Post Storage Mode:1
   */
context-param和init-param区别
web.xml里面可以定义两种参数:
(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:
<context-param>
           <param-name>context/param</param-name>
           <param-value>avalible during application</param-value>
</context-param>
(2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:
<servlet>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>com.wes.controller.MainServlet</servlet-class>
    <init-param>
       <param-name>param1</param-name>
       <param-value>avalible in servlet init()</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
</servlet>
在servlet中可以通过代码分别取用:
package com.wes.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class MainServlet extends HttpServlet ...{
public MainServlet() ...{
        super();
     }
    public void init() throws ServletException ...{
         System.out.println("下面的两个参数param1是在servlet中存放的");
         System.out.println(this.getInitParameter("param1"));
         System.out.println("下面的参数是存放在servletcontext中的");
        System.out.println(getServletContext().getInitParameter("context/param"));
      }
}
第一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速批量修改文件名

文件太多&#xff0c;文件名太乱&#xff0c;希望快速批量修改文件名&#xff0c;以下的两种方法可以帮到你&#xff0c;亲测好用。 方法一 1.选中需要批量修改的文件&#xff0c;如图1 图12.按F2键&#xff0c;输入文件名。如图2. 图23.Enter&#xff0c;效果如图3. 图3方法…

【LUOGU???】WD与积木 NTT

题目大意 把 \(n\) 个有标号物品分到一些有标号的箱子中且不允许为空&#xff0c;问期望箱子的数量。 多组询问。 \(n\leq 100000\) 题解 记 \(f_i\) 为 \(i\) 个有标号物品分到一些有标号的箱子中且不允许为空的箱子的数量之和。 记 \(g_i\) 为 \(i\) 个有标号物品分到一些有标…

7对讲机调频软件_对讲机怎么配对?

有好多朋友买到了新对讲机和老对讲机的频率不一样&#xff0c;从而导致了新旧对讲机无法通联。买到了新对讲机&#xff0c;我们要先知道旧对讲机的频率是多少。要想知道旧对讲机的频率是多少&#xff0c;我们就要需要一定的工具&#xff0c;首先我们要有一台XP系统的电脑&#…

RTK、IMU、RT3000

GPS/RTK 全球卫星定位系统(GPS)的全面建成和发展&#xff0c;导致了导航和测绘行业的一场重大深刻的技术革命。常规的静态GPS测量方法越来越多地应用于高精度控制网的建立&#xff0c;但利用该方法无法在野外对观测数据进行实时检核&#xff0c;从而造成观测结果不合格而需要返…

POJ--3974 Palindrome(回文串,hash)

链接&#xff1a;点击这里 #include<iostream> #include<algorithm> #include<stdio.h> #include<cstring> using namespace std; #define maxn 1000005 #define LL long long #define ull unsigned long long const LL P 131; ull p[maxn10],f[maxn]…

Springboot 两种方式配置启动热部署(图文界面)

目录 前言1. 类加载启动2. devtools前言 Java的热部署(Hot Deployment)是指在应用程序运行时更新或替换类文件,而无需重新启动整个应用程序。 代表不停止应用程序的情况下修改代码并立即看到变化,这对于开发和调试过程非常有用。 类加载器(Class Loader): Java应用程序…

Microsoft VBScript 编译器错误 错误原因 代码大全

Microsoft VBScript 编译器错误 错误 缺少语句ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件 MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态&#xff0c;或表不存在于conn打开的数据库…

hadoop3 禁用ec_Hadoop + Amazon EC2 –更新的教程

hadoop3 禁用ec在Hadoop的Wiki页面上放置了一个旧教程&#xff1a; http : //wiki.apache.org/hadoop/AmazonEC2 &#xff0c;但是最近我不得不遵循本教程&#xff0c;并且我注意到它没有涵盖某些Amazon新功能。 建议您已经熟悉Hadoop的基础来学习本教程&#xff0c;可以在Had…

libuv 原理_Libuv初理解

整体概念libuv是一个跨平台、专门写给nodejs的库&#xff0c;它的设计是围绕着事件驱动的异步I/O模型。在不同的I/O轮询机制上&#xff0c;libuv提供的不是简单抽象对象&#xff1a;handle和streams为sockets和其他实例提供了一个高级抽象。此外&#xff0c;libuv还提供了跨平台…

Matlab排序函数sort()和sortrows()

sort() 调用形式 1.Ysort(X) 对矩阵、向量或数组进行升序排列。 例1 >> amagic(4)a 16 2 3 135 11 10 89 7 6 124 14 15 1>> brand(1,4)b 0.8147 0.9058 0.1270 0.9134>> sort(a)ans 4 2 3…

[Swift]LeetCode968.监控二叉树 | Binary Tree Cameras

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

Maven神秘化

由于我的Android开发的背景下&#xff0c;我比较习惯到摇篮 &#xff0c;而不是Maven的 。 尽管我知道Gradle基于Maven&#xff0c;但我从未调查过幕后发生的事情。 在过去的一周中&#xff0c;我一直在尝试了解细节并找出Maven的不同组成部分。 什么是Maven Maven是主要用于J…

走进JVM【二】理解JVM内存区域

引言 对于C程序员&#xff0c;内存分配与回收的处理一直是令人头疼的问题。Java由于自身的自动内存管理机制&#xff0c;使得管理内存变得非常轻松&#xff0c;不容易出现内存泄漏&#xff0c;溢出的问题。 不容易不代表不会出现问题&#xff0c;一旦内存泄漏或溢出的情况发生&…

mysql一对多_mysql一对多查询合并多的一方的数据。

有时候会有这样一个需求&#xff0c;查询的一条记录需要包含另一个表的多条记录&#xff0c;并且让多条记录成为一个字段组成最终的一条记录。比较难描述&#xff0c;看例子吧。创建一个产品表&#xff1a;create table product(proId int(10),proName varchar(50))创建一个成分…

Matlab矩阵、元胞数组的合并拼接

矩阵合并拼接 1.横向拼接 [a,b] [a b]均可 例1 >> amagic(3)a 8 1 63 5 74 9 2>> brand(3)b 0.6324 0.5469 0.15760.0975 0.9575 0.97060.2785 0.9649 0.9572>> c[a,b]c 8.0000 1.0000 6.0000 0.632…

Matlab拆分矩阵/Matlab如何分割大矩阵(mat2cell函数)

dim1Dist分割后矩阵行数组成的向量&#xff0c;dimNDist指的是分割后矩阵列数组成的向量 例有100*200的矩阵A >> Arand(100,200); >> bmat2cell(A,[30 40 30],[100 70 30])b 33 cell 数组{30100 double} {3070 double} {3030 double}{40100 double} {40…

分布式系统部署、监控与进程管理的几重境界

陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice t.sina.com.cn/giantchen 陈硕关于分布式系统的系列文章&#xff1a;http://blog.csdn.net/Solstice/category/802325.aspx 本作品采用“Creative Commons 署名-非商业性使用-禁止演绎 3.0 Unported 许可协议(cc by-nc-nd)”…

.net core mvc初级教程(六)

一、创建movie的视图 二、对cinema、movie视图添加‘添加信息’的操作 一、创建movie的视图 在views文件夹下添加Movie文件夹&#xff0c;在这个文件夹下添加Index.cshtml视图&#xff0c;为什么添加Index.cshtml这个名字的视图&#xff0c;可以看看我们写的MovieController控制…

apache camel_发掘Apache Camel的力量

apache camel最近几年&#xff0c;ESB软件越来越受欢迎。 如果大多数人通常知道什么是ESB&#xff0c;那么他们很少会清楚地了解这种体系结构的不同组件的确切作用。 例如&#xff0c;Apache ServiceMix由三个主要组件组成&#xff1a;Apache Karaf&#xff08;OSGI容器&#…

角反射器的功能及应用

雷达反射器又名角反射器&#xff0c;它是通过金属板材根椐不同用途做成的不同规格的雷达波反射器。当雷达电磁波扫描到角反射后&#xff0c;电磁波会在金属角上产生折射放大&#xff0c;产生很强的回波信号&#xff0c;在雷达的屏幕上出现很强的回波目标。由于角反射器有极强的…