e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> JSP教程 >> 缓存JSP显示的内容 >> 教程正文
 
教程搜索
 
 
相关教程
  • JSP分页技术实现
  • 使用XML封装数据库操作语
  • 结合”XML封装数据库操作
  • 如何使用XML实现多渠道接
  • 深入浅出taglib
  • 在JSP中编写你的第一个Ta
  • 用Java实现Web服务器
  • 如何利用xml,javascr
  • 缓存JSP显示的内容
  • 关于JAVA的分页查询操作技
  • 漫步j2ee之jsp技术(1)
  • 漫步j2ee之jsp技术(2)
  • Portlet应用开发(Portlet
  • 如何用jsp输出存在于orac
  • Servlet设计
  • 用servlet显示图片
 
 
赞 助 商
 
 
缓存JSP显示的内容
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

前段时间做自己社区的论坛,在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源码代码如下

  1. /** * START File FileCaptureFilter.java */
  2. package com.junjing.filter;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.io.*;
  6. public class FileCaptureFilter implements Filter{
  7. private String protDirPath;
  8. public void init(FilterConfig filterConfig) throws ServletException
  9. {
  10. protDirPath = filterConfig.getServletContext().getRealPath("/");
  11. }
  12. public

    void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
  13. throws IOException , ServletException {
  14. String fileName = protDirPath + "forum/lastest.html";
  15. PrintWriter out = response.getWriter();
  16. FileCaptureResponseWrapper responseWrapper =
  17. new FileCaptureResponseWrapper((HttpServletResponse)response);
  18. chain.doFilter(request, responseWrapper);
  19. // fill responseWrapper up
  20. String html = responseWrapper.toString();//得到的html页面结果字符串
  21. //responseWrapper.writeFile(fileName);
  22. // dump the contents 写成html文件,也可以保存在内存
  23. //responseWrapper.writeResponse( out );
  24. // back to browser
  25. //responseWrapper.sendRedirect("lastestThread.jsp");
  26. }
  27. public void destroy() {}
  28. }
  29. /** * END File FileCaptureFilter.java */
  30. /** * START File FileCaptureResponseWrapper.java */
  31. package com.junjing.filter;
  32. import javax.servlet.*;
  33. import javax.servlet.http.*;
  34. import java.io.*;
  35. public class FileCaptureResponseWrapper extends HttpServletResponseWrapper{
  36. private

    CharArrayWriter output;
  37. public String toString() {
  38. return output.toString();
  39. }
  40. public FileCaptureResponseWrapper(HttpServletResponse response) {
  41. super (response);
  42. output = new CharArrayWriter ();
  43. }
  44. public PrintWriter getWriter() {
  45. return new PrintWriter (output);
  46. }
  47. public void writeFile(String fileName) throws IOException {
  48. FileWriter fw = new FileWriter(fileName);
  49. fw.write( output.toCharArray() );
  50. fw.close();
  51. }
  52. public void writeResponse(PrintWriter out) {
  53. out.print( output.toCharArray() );
  54. }
  55. }
  56. /** * END File FileCaptureResponseWrapper.java */

附件源代码

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

  1. /** * START File FileCaptureResponseWrapper.java */
  2. package com.junjing.filter;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;

    [1] [2] 下一页

  • 上一篇教程: 关于JAVA的分页查询操作技术
  • 下一篇教程: 如何利用xml,javascript绕开applet的安全问题
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.