<object id="getjk"></object>
<object id="getjk"></object>
    1. <object id="getjk"></object>
    2. <th id="getjk"></th>
      XYcooper
      • 性别: Icon_minigender_1
      • 冠亚体育怎么样

      ▯□☐在Web applications间共享数据◘◊◘

       

      阅读更多
      □☐◘◊◘▪▫▯□☐◘◊◘▪▫▯□☐◘◊◘▪▫▯□☐◘◊◘▪▫▯□☐◘◊◘▪▫▯□☐◘◊◘▪▫▯□
      根据 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>
      applications, 数据, 装载, 而且, 存储


      (责任编辑:XYcooper)
      分享到: