网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 网站开发-> JSP技术-> JSP显示内容缓存技巧

JSP显示内容缓存技巧
作者:佚名 来源:InterNet 加入时间:2005-3-25
相关文章
  • jsp连接数据库大全
  • Jsp如何实现网页的重定向
  • 编写线程安全的JSP程序
  • 用缓冲技术提高JSP应用的性能和稳定性
  • Jsp结合XML+XSLT将输出转换为Html格式
  • JSP数据库连接池的必要性
  • 在JSP页面中实现检索数据的分页显示
  • 在jsp中作HTTP认证的方法
  • JSP通过JDBC与Oracle相连
  • html与jsp开发分离技术
  • 相关书籍:
  • JSP数据库开发实例精粹
  • JSP软件工程案例精解
  • JSP语法
  • JSP数据库编程指南
  • 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 */ 


    [文章录入员:nancy]

    相关文章
  • jsp连接数据库大全
  • Jsp如何实现网页的重定向
  • 编写线程安全的JSP程序
  • 用缓冲技术提高JSP应用的性能和稳定性
  • Jsp结合XML+XSLT将输出转换为Html格式
  • JSP数据库连接池的必要性
  • 在JSP页面中实现检索数据的分页显示
  • 在jsp中作HTTP认证的方法
  • JSP通过JDBC与Oracle相连
  • html与jsp开发分离技术
  • 相关书籍:
  • JSP数据库开发实例精粹
  • JSP软件工程案例精解
  • JSP语法
  • JSP数据库编程指南
  • JSP由浅入深
  • 本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    JSP技术
    ASP/ASP.NET
    PHP技术
    JSP技术
    XML技术
    CGI/PERL
    WEB服务器
    WordPress专题
    其它
    电脑教程阅读排行
    ·几个常见的关于日期的问题
    ·WebLogic的初步研究(1)...
    ·WebLogic的初步研究(2)...
    ·新手入门经典:Jsp环境配置
    ·JSP动态输出Excel及中文乱...
    ·jsp基础学习资料
    ·MySQL实现分页JSP+JAV...
    ·jsp连接数据库大全
    ·Tomcat4.01全攻略
    ·JSP的安装、启动及简单示例