`
晨星★~雨泪
  • 浏览: 447229 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSP显示内容缓存技巧

    博客分类:
  • Java
阅读更多
前段时间做自己社区的论坛,在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 */

分享到:
评论
1 楼 wazj0517 2008-03-19  
每次都要重写HTML文件??

相关推荐

    JSP实用技巧集合,jsp编程的一些小技巧总结

    jsp编程的一些小技巧总结,绝对实用。包括JSP编程中常用的js技术。 1.JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4. 两级下拉列表框联动菜单? 5. java中如何把一个目录...

    jsp实现将动态网页转换成静态页面的方法

    jsp 显示内容缓存技巧 前段时间做自己社区的论坛,在jive 的基础上做一个页面显示所有论坛的帖子,可以称之为总版,模仿forum 类的接口做个superforum 并且实现cachable,不过因为这个页面刷新量比较大,虽然被cache ...

    jsp编程技巧集锦

    JSP编程技巧集锦 <br>需要者请联系:e_mail:fzlotuscn@yahoo.com.cn QQ:595563946<br><br>目 录 <br>1. JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4...

    JSP JSP编程技巧

    2. **分离关注点**:将业务逻辑移到JavaBeans,保持JSP页面专注于显示。 3. **使用布局模板**:通过`<jsp:include>`和`<jsp:useBean>`实现页面复用和布局管理。 4. **错误处理**:确保有合适的异常处理机制,避免在...

    JSP通用分页显示1.2.rar_java 分页显示_jsp_jsp 分页_jsp 分页_jsp分页

    **JSP分页显示技术详解** 在Web开发中,数据量较大的时候,通常需要采用分页的方式来展示数据,以提高用户体验并减轻服务器负担。JSP(JavaServer Pages)作为Java平台上的动态网页技术,提供了丰富的功能来实现这...

    jsp编程技巧 创建表示层之类

    此外,通过JSP显示这些数据,可以使用JSTL的`<c:forEach>`标签遍历列表,生成表格或列表视图。 七、异常处理与错误页面 表示层类应包含处理异常的机制,确保在出现错误时能优雅地展示错误信息,而不是显示不友好的...

    jsp小技巧实例

    缓存静态内容;使用session管理用户状态时,注意清理无用的session。 这些小技巧涵盖了JSP开发中的常见问题和解决方案,通过学习和实践这些技巧,你可以更有效地编写和维护JSP应用程序,提高开发效率,同时提升用户...

    jsp分页显示

    **JSP分页显示**是Web开发中常见的...通过以上内容,我们可以了解到JSP分页显示的基本原理和实现方法。在实际项目中,我们需要根据具体需求和性能要求,灵活运用这些技术和策略,为用户提供高效、流畅的数据浏览体验。

    一些JSP开发技巧,自己学完后整理出来的,还是比较有用

    10. **优化JSP缓存**:通过设置合适的缓存策略,可以减少服务器对JSP页面的重新编译,提高响应速度。 11. **使用自定义标签库**:创建和使用自定义标签库可以使代码更模块化,提高代码复用性,并且让页面更易读。 ...

    jsp技巧

    使用`<jsp:include page="header.jsp" flush="true" />`可以缓存静态内容,提高页面加载速度。同时,合理使用session和cookie,避免不必要的网络传输。 ### 8. **国际化与本地化** 通过`<fmt:message>`标签和资源包...

    jsp网页设计40种常见的网页技巧

    本文将围绕“jsp网页设计40种常见的网页技巧”这一主题,结合JavaScript的应用,来深入探讨一些实用的技术点。 1. **响应式设计**:确保你的JSP页面能在不同设备上自适应显示,利用CSS3的媒体查询实现。 2. **模板...

    Jsp中如何让图片在div中居中

    在讨论JSP页面中图片居中的问题时,首先需要掌握一些基础的CSS布局知识,包括display属性的使用、垂直居中的方法、margin属性的自动居中技巧以及W3C标准对页面渲染的影响。 当涉及到在div中居中一张图片时,CSS是...

    jsp新闻发布系统源代码

    对于初学者,可以通过分析和修改这个源代码来学习JSP开发、数据库交互、MVC模式应用以及Web应用的部署和调试技巧。 综上所述,"jsp新闻发布系统源代码"是一个完整的项目实例,它涵盖了JSP开发中的多种技术和实践,...

    jsp编程技巧

    - 业务逻辑应放在JavaBean或Servlet中,JSP仅负责显示数据,遵循MVC模式。 - 使用Model2架构,提高代码的可维护性和可扩展性。 7. **错误处理和日志记录** - 使用`<error-page>`配置处理特定HTTP错误代码的页面...

    《JSP2.0技术手册》

    3. **动态表格展示**:使用JSP和JSTL显示动态生成的数据表格,体现JSP的动态内容生成能力。 4. **邮件发送功能**:结合JavaMail API,利用JSP发送电子邮件。 **六、最佳实践与进阶技巧** 1. **MVC设计模式**:了解...

    jsp,asp页面高亮字查询显示

    可以通过使用缓存、节流或防抖函数等技巧来优化。 6. 兼容性处理:不同的浏览器可能对某些JavaScript特性支持不一,因此需要考虑兼容性问题,确保在各种环境下都能正常工作。 通过"HighlightWord"这个文件,我们...

    JSP技巧集

    JSP技术的核心在于它的“页面组件”,这些组件在服务器端运行,并能够生成HTML、XML或其他格式的文档,然后发送到客户端进行显示。 ### JSP基本概念 1. **JSP页面结构**:一个JSP页面可以包含HTML、CSS、...

    jsp开发指南(从基础到小项目实践)

    2. **Servlet控制逻辑,JSP显示视图**:推荐采用MVC(Model-View-Controller)架构,Servlet处理业务逻辑,JSP负责展示数据。 ### 四、JSP实战 1. **简单实例**:创建一个Hello, World! JSP页面,了解JSP运行机制...

    jsp分页技巧

    JSP分页技巧不仅涉及对变量和SQL查询的合理设计,还需要关注性能优化,例如缓存机制的引入、数据库索引的优化等,以确保在处理大量数据时仍能保持良好的响应速度。此外,随着技术的发展,现代Web框架如Spring Boot...

    JSP实现BBS论坛

    **JSP实现BBS论坛** 是一种常见的Web应用程序开发任务,尤其在软件工程课程设计和毕业设计中常见。它涉及到多种技术的综合运用,...通过分析这些文件,可以进一步学习和理解JSP实现BBS论坛的具体实现细节和编程技巧。

Global site tag (gtag.js) - Google Analytics