JSP显示内容缓存技巧

  前段时间做自己社区的论坛,在jive的基础上做一个页面显示所有论坛的帖子,可以称之为总版,模仿Forum类的接口做个SuperForum并且实现Cachable,不过因为这个页面刷新量比较大,虽然被Cache了,我还是想办法进行页面的缓存,感觉用jsp产生的html静态内容当缓存,页面访问速度应该有所提高。

数据挖掘论坛

  首先想到的一种办法,是采用java.net的URLConnection把服务器上的jsp抓过来做缓存,不过我觉得这样做太见外了,自己服务器上的东西,为何要用HTTP去访问.于是想另外一个办法,把jsp的out对象的输出控制到自己希望的地方.比如输出到静态文件,又或者保存成全局的字符串变量.这样的话,浏览就不需要执行jsp,只是浏览该html了.仅仅在数据有更新的时候进行一次update操作,把jsp重新输出为html. 数据挖掘论坛

  我觉得,浏览事件比数据插入或更新发生的次数多的时候.不妨试试这个办法来提高页面访问速度.

数据挖掘论坛

  整件事情有点像把jsp当作模板,生成静态的html页面.

  将如下代码写入web-xml 数据挖掘工具


<filter>
<filter-name>FileCaptureFilter</filter-name>
<filter-class>com.junjing.filter.FileCaptureFilter</filter-class>
</filter> 数据挖掘论坛

<filter-mapping>
<filter-name>FileCaptureFilter</filter-name>
<url-pattern>/latest.jsp</url-pattern>
</filter-mapping> 

  latest.jsp是我要cache的页面

数据挖掘工具

  java源码代码如下

数据挖掘交友


/** * START File FileCaptureFilter.java */

数据挖掘研究院

package com.junjing.filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class FileCaptureFilter implements Filter
{
 private String protDirPath;
 public void init(FilterConfig filterConfig)
  throws ServletException
  {
   protDirPath = filterConfig.getServletContext().getRealPath("/");
  }
 public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
  throws IOException, ServletException
  {
  String fileName = protDirPath + "forum/lastest.html";
  PrintWriter out = response.getWriter();
  FileCaptureResponseWrapper responseWrapper = new FileCaptureResponseWrapper((HttpServletResponse)response);
  chain.doFilter(request, responseWrapper);
  // fill responseWrapper up
  String html = responseWrapper.toString();
  //得到的html页面结果字符串
  // responseWrapper.writeFile(fileName);
  // dump the contents 写成html文件,也可以保存在内存 数据挖掘工具
  //responseWrapper.writeResponse( out );
  // back to browser
  //responseWrapper.sendRedirect("lastestThread.jsp");
  }

数据挖掘交友

  public void destroy() {}
} 数据挖掘工具

/** * END File FileCaptureFilter.java */
/** * START File FileCaptureResponseWrapper.java */

package com.junjing.filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

数据挖掘工具

public class FileCaptureResponseWrapper
 extends HttpServletResponseWrapper
 {
  private CharArrayWriter output;
  public String toString()
  {
   return output.toString();
  }
  public FileCaptureResponseWrapper(HttpServletResponse response)
  {
   super(response);
   output = new CharArrayWriter();
  } 数据挖掘论坛

  public PrintWriter getWriter()
  {
   return new PrintWriter(output);
  } 数据挖掘实验室

  public void writeFile(String fileName)
   throws IOException
   {
    FileWriter fw = new FileWriter(fileName);
    fw.write( output.toCharArray() );
    fw.close();
   }

数据挖掘工具

  public void writeResponse(PrintWriter out)
  {
   out.print( output.toCharArray() );
  }
 }
 /** * END File FileCaptureResponseWrapper.java */
  附件源代码 数据挖掘研究院

  不过采用resin服务器的话,以上代码会失效。因为resin没有实现getWriter方法,而是采用getOutputStream取而代之,所以必须修改些代码来迎合resin运行环境:


/** * START File FileCaptureResponseWrapper.java */ 数据挖掘论坛

package com.junjing.filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class FileCaptureResponseWrapper
 extends HttpServletResponseWrapper
{
 private CharArrayWriter output;
 public String toString()
 {
  return output.toString();
 }
 public FileCaptureResponseWrapper(HttpServletResponse response)
 {
  super(response);
  output = new CharArrayWriter();
 }

数据挖掘实验室

 public PrintWriter getWriter()
 {
  return new PrintWriter(output);
 }

 public void writeFile(String fileName)
  throws IOException
 {
  FileWriter fw = new FileWriter(fileName);
  fw.write( output.toString());
  fw.close();
 }

 public ServletOutputStream getOutputStream()
  throws java.io.IOException
  {
   return new ServletOutputStream();
  }

数据挖掘论坛

 public void write(int b)
  throws IOException
 {
  output.write(b);
 }

 public void write(byte b[])
  throws IOException
 {
  output.write(new String(b,"GBK"));
 } 数据挖掘论坛

 public void write(byte b[], int off, int len)
  throws IOException
 {
  output.write(new String(b, off, len));
 }
};
}

 public void writeResponse(PrintWriter out)
 {
  out.print(output.toCharArray());
 }
}
/** * END File FileCaptureResponseWrapper.java */ 
数据挖掘研究院

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:JSP/Servlet构建三层管理信息系统
下一篇:JSP显示内容缓存技巧
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • Java学生成绩管理系统源代码
  • Servlet动态产生JPEG图像的例子
  • JSP数据导出到EXCEL简便方法
  • JSP像乌云般挡住了JSF的光芒
  • Java EE5.0时代来临,金蝶Apusic抢先撞线!
  • JSP不是简化的Java
  • 在JSP中如何实现MD5加密
  • JSP/Servlet/JSF:标签库的深入研究
  • jsp计数器制作手册
  • jsp页面显示数据导出到excel表中
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • Java EE5.0时代来临,金蝶Apusic抢先撞线!
  • JSP像乌云般挡住了JSF的光芒
  • jsp计数器制作手册
  • 面向对象编程,我的思想(5)
  • jsp读取大对象CLOB并生成xml文件示例
  • JSP开发前菜鸟设置篇
  • JRun3.0配合IIS的安装全过程
  • win2000下jsp平台搭建的简单过程
  • IIS6和Tomcat5的整合
  • Windows下JSP开发环境的配置
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静