根据 ClassLoader 的装载顺序,首先装载那些最基础的类,然后才轮到web app中的类,而且基础类装载以后可由多个web app使用,因此,可以设想,如果我们把存储共享数据的util类打包与基础类放在一起,如classpath, 应用服务器的包文件存放处(这里使用的是tomcat,因此放在common/lib/下),就可以在各个web app中向这个类填充数据或者读取数据。
为什么这里说的是向类填充或读取数据呢?因为如果创建这个类的对象,势必这个对象要处于某个web app的context中,其它的web app必然无法访问到这个web app的context。那么怎么解决呢? 既然这些web app能使用到这个类,那么如果我们把这个类的所有的数据和方法都设置为static,那么自然web app们就可以直接访问到这些数据和方法,从而达到共享之目的。
经过我的测试,这样的共享是完全没问题的,只是要注意一下并发访问的情况。
基础类:
================================
package org.openthoughts.util;
import Java.util.Hashtable;
public class ShareableRepository {
private static Hashtable shared = new Hashtable();
public static Object get(String key) {
Object value = null;
synchronized(shared) {
value = shared.get(key)
}
return value;
}
public static void put(String key, Object value) {
synchronized(shared) {
shared.put(key, value);
}
}
}
=================================
第一个JSP:
=================================
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="org.openthoughts.util.ShareableRepository" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1 align="center">You use this form to insert values to shared repository.</h1>
<%
String key = request.getParameter("key");
String value = request.getParameter("value");
if(null != key && value != null) {
ShareableRepository.put(key, value);
}
%>
<form action="index.jsp" method="POST">
<label for="key">Key:</label>
<input type="text" name="key" value="" /><br>
<label for="value">Value:</label>
<input type="text" name="value" value="" /><br>
<input type="submit" value="Submit" name="submit" />
</form>
</body>
</html>
====================================
第二个JSP:
====================================
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="org.openthoughts.util.ShareableRepository" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1 align="center">You use this form to get values from shared repository.</h1>
<form action="index.jsp" method="POST">
<label for="key">Key:</label>
<input type="text" name="key" value="" /><br>
<input type="submit" value="Submit" name="submit" />
</form>
<%
String key = request.getParameter("key");
String value = "";
if(null != key) {
value = (String)ShareableRepository.get(key);
}
%>
The value you want to fetch is <%=value==null?"":value%>
</body>
</html>
=====================================
All these files are powerd by NetBeans IDE.