OsCache在Struts中的应用

  OsCache提供了一个管理类com.opensymphony.oscache.Web.ServletCacheAdministrator,通过 这个类,我们可以管理jsp页面定义的标签,下面看看在Struts的Action中,如何管理页面中的Cache标签的内容。业务逻辑如下:首先,用户 请求到Action中,该Action通过ServletCacheAdministrator实例来判断jsp页面是否已经失效(比如该Cache有效 期是10分钟),如果Cache标签失效了,那么重新取数据,否则直接forward到jsp页面,这样用户看到的就是经过缓存的jsp页面。以下是 Action 中的代码片:

        String normalImageOsGroup=null;//定义缓存的组

        try{

           ServletCacheAdministrator admin=null;

               Cache oscache=null;

                   if(admin==null)

                      {

                        admin=ServletCacheAdministrator.getInstance(this.getServlet().getServletContext());

                     }//if

                     if(oscache==null)

                    {

                      oscache=admin.getCache(req,PageContext.APPLICATION_SCOPE);

                     }//if

                   //取得group为mygroup ,key为persion_msg的缓存

                 normalImageOsGroup="mygroup";

                 String OsEntryKey=admin.generateEntryKey("persion_msg",request,PageContext.APPLICATION_SCOPE);

                  Object osobj=oscache.getFromCache(OsEntryKey,600);//判断缓存10分钟的期限是否已经到了

                   /*

                    如果已超出指定的Cache有效期600秒,将报NeedsRefreshException异常,

                     这样我们就通过异常处理部分来重新取得数据,然后传递给页面使用。

                     */

 

       }catch(NeedsRefreshException  nrfe){

           log.warn("OsCache已经过期,需要重新添加数据");

          String oldCache=(String)nrfe.getCacheContent();//取得数据

           //为了避免死锁因为NeedsRefreshException产生时,如果不调用update或者put得相关操作,osCache将锁该cache

          oscache.putInCache(OsEntryKey,oldCache,new String[]{normalImageOsGroup});

          //刷新该key,使页面的oscache失效

          oscache.flushEntry(OsEntryKey);

        }

      以下是jsp页面代码:

      < %@page contentType="text/html;charset=GBK"% >

     < % @taglib uri="oscache" prefix="cache" % >

     < %

          Person ps=(Person)request.getAttribute("PersonObject");

   % >

    <html>

     <head>

    <body>

   <cache:cache key="persion_msg" time="-1" groups="mygroup">

         <% 

           if(ps!=null){

             out.println("Person Name:"+ps.getName());

          }//if

        %>

 

<cache:cache>

</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值