触发更新 ServletContext 中的全局变量值

【前情提要】

ServletContext对象--三大域对象

Servlet三大域对象的应用 request、session、application(ServletContext)

ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

(1)request,一个用户可有多个;

(2)session,一个用户一个;

(3)而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

【引言】

需求:

1.服务器启动,加载 “基础数据”,从数据库指定表 Or 配置文件,提供公共调用;

2.“基础数据” 变更,重新加载 变动后的 “基础数据”。

【正文】

java 逻辑

public class ApplicationListener implements ServletContextListener,ServletRequestListener
{
	private static Logger log = Logger.getLogger(ApplicationListener.class);

	public void contextInitialized(ServletContextEvent context)
	{//web start business
		/** ……启动服务…… **/
		LocalCache.getInstance().start();
		if(log.isInfoEnabled())
		{
			log.info("DebtLoad started------------------------------");
		}
		ServletContext servletContext = context.getServletContext();

		/** 设置 基础数据 **/
		ApplicationListener.setInitData(servletContext);
	}

	public void contextDestroyed(ServletContextEvent arg0)
	{

		LocalCache.getInstance().stop();
		app.stop();

		if(log.isInfoEnabled())
		{
			log.info("DebtLoad stopped-------------------------------------------------------------------------------------");
		}
	}

	/** 监控请求 **/
	public void requestInitialized(ServletRequestEvent context)
	{
		HttpServletRequest request=(HttpServletRequest)context.getServletRequest();
		String strClientIP=request.getRemoteAddr();
		String strURL=request.getRequestURL().toString();
		String requestURI = request.getRequestURI();
		/** 对指定请求进行识别,符合要求,做相应操作 **/
		if (requestURI.indexOf("reloadInitData.do") > -1 ) {
			ServletContext servletContext = context.getServletContext();

			/** 设置 基础数据 **/
			ApplicationListener.setInitData(servletContext);
			return;
		}

		if(strURL.endsWith(".error")==false)
		{
			return;
		}

		if(request.getQueryString()!=null)
		{
			strURL+="?"+request.getQueryString();
		}
		if(log.isDebugEnabled())
		{
			log.debug(strClientIP+": "+strURL);
		}
	}

	public void requestDestroyed(ServletRequestEvent arg0)
	{
	}

	/**
	 *  从数据库,加载数据
	 * @param strTransName
	 * @return
	 */
	private static String getInitData(String strTransName)
	{
		/** 读取 基础数据 **/
		/** ………… **/

		return Result.toJSON();
	}

	/**
	 * 将基础数据,设置到 ServletContext 中
	 * @param servletContext
	 */
	private static void setInitData(ServletContext servletContext)
	{
		/** 从数据库,加载基础数据 **/
		String borrowMode = ApplicationListener.getInitData("getBorrowModes");
		String ceditorFund = ApplicationListener.getInitData("getCreditorFunds");
		String column = ApplicationListener.getInitData("getDBFields");

		servletContext.setAttribute("borrowModeJson",borrowMode.substring(8,borrowMode.length()-1));
		servletContext.setAttribute("ceditorFundJson",ceditorFund.substring(8,ceditorFund.length()-1));
		servletContext.setAttribute("columnJson",column.substring(8,column.length()-1));
	}

}

  

html

<a href="javascript:void(0);" style="margin-left:68%;visibility:hidden" onclick="reLoadInitData();" class="easyui-linkbutton" data-options="iconCls:‘icon-reload‘">重新加载基础数据</a>

 正常情况下,按钮【重新加载基础数据】不可见。避免 误操作 和 无关操作,所以,平时给隐藏了。需要使用时,将“visibility:hidden”删除,按钮就能显示出来。

js:

function reLoadInitData() {
    jQuery.ajax({
        type: "GET",   //post提交方式默认是get
        url: "/reloadInitData.do",
        error: function (request) {      // 设置表单提交出错
            jQuery("#showMsg").html(request);  //登录错误提示信息
        },
        success: function (data) {
            if(data == "success"){
                document.location = "/zijinfang/list.htm";
            }else{
                jQuery("#showMsg").html("登录失败!");  //登录错误提示信息
            }
        }
    });
}

  

原文地址:https://www.cnblogs.com/bridgestone29-08/p/8568705.html

时间: 2024-10-13 15:37:33

触发更新 ServletContext 中的全局变量值的相关文章

python 闭包中引用的变量值变更问题

python的闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变. 如下: def count():     fs = []     for i in range(1, 4):         def lazy_count(j):             def cou():                 return j*j             return cou         r = lazy_count(i)     

获取oracle sql语句中绑定变量值的方法

在诊断 sql的性能问题时,我们有时候需要获取其绑定变量的实际值,然后将此实际值带入到sql语句当中,用原来的sql构成select语句(带where条件),实际的执行一下,看一下选择性如何. 本文就是说获取其绑定变量值的方法.本文的编写得到枯荣长老的帮助,在此表示感谢. 本文适用于与oracle 10G或者更高版本的db. alter session set nls_date_format = 'yyyy-mm-dd,hh24:mi:ss'; set linesize 400 col sql_

动态修改 NodeJS 程序中的变量值

如果一个 NodeJS 进程正在运行,有办法修改程序中的变量值么?答案是:通过 V8 的 Debugger 接口可以!本文将详细介绍实现步骤. 启动一个 HTTP Server 用简单的 Hello World 做例子吧,不过略作修改.在 global 下放一个变量 message, 然后打印出来: // message content will be modified ! global.message = "hello world!"; var server = require('h

Eclipse中debug时鼠标悬停不能查看变量值的问题

问题描述:eclipse在debug模式下,当鼠标移动到某个变量上面时不自动显示该变量对应的值 解决方案:点击eclipse的Window->Preferences->Java->Editor->Hovers, 勾选Variable Values,(如果Combined Hover已经选择了,就取消它), 然后点击Apply,最后点OK.有时不需要勾选Variable Values也能查看变量值,所以勾不勾选多试几下,debug可能就好了. Hovers主要是来用配置当鼠标移动到工

JAVA读取字符串中某个变量值,并进行简单比较

开发中有时会遇到需要截取一个字符串中某个变量后面带的值,并对这个值做简单运算的情况,比如“tom, age 23, come fron us”, 这里想判断年龄是否大于30岁,实现如下: 1 String inputstr = "tom, age 23, come fron us"; 2 String matchString = "age 变量1"; // 需要截取的变量正则表达式 3 String ruleString = "变量1 > 30&qu

iOS中绑定tableview后,变量值消失的问题

好吧,标题就以最通俗的语句命名,估计百度收录的时候,大家查找的时候会更加的方便. iOS新手,这个问题着实调试了好长时间! 由于上手就开始做大的项目,也没时间从基础做起,相信大多数小公司的开发者都是这种模式.因此很多问题都产生自很基础的错误. 项目使用mvc结构,在异步读取完数据后,NSArray中model的数据就丢失了,专业点就是内存释放了,只剩下内存地址了. 可能大家的情况和我不同,所以解决方法也不一定相同. 项目服务端是asp.net webservice,使用AFNetworking读

如何在Ubuntu手机应用中得到所有的环境变量值

我们在先前的例程中已经通过一些方法得到我们应用的一些环境变量值.这些值有的非常有用,比如我们可以得到我们应用所只能访问的目录.在今天的例程中,我们来展示一种方法可以得到应用所有的环境变量.在我们的实际应用中,我们可以通过这些环境变量来做一些事情.另外,在这个例程中,我们也展示了如何在Qt C++的代码中构造我们的ListView中的model.我们在先前的例程"Ubuntu OS应用Runtime Enviroment"已经展示了和我们平台安全相关的一些环境变量. 首先,我们来展示我们

JDK环境变量中dt.jar、tools.jar等变量值的作用

JAVA_HOME [plain] view plain copy 变量名:JAVA_HOME 变量值:E:\java\jdk7 用途:定义一个变量,供其他地方使用 PATH [plain] view plain copy 变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 用途:让系统在任何路径下都可以识别java.javac.javap等命令 CLASSPATH [plain] view plain copy 变量名:CLASSPATH 变量值

ORACLE获取SQL绑定变量值的方法总结

  本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅. 方法1:查询V$SQL V$SQL视图中的BIND_DATA字段用来存储绑定变量的值,但是从这个视图查询绑定变量的值,有很大的局限性: 1: 它的记录频率受_cursor_bind_capture_interval隐含参数控制,默认值为900,表示每900秒记录一次绑定值,也就是说在900内,绑定变量值的改变不会反应在这个视图中.除非你调