`
theice
  • 浏览: 56920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JSP显示内容缓存技巧

阅读更多

前段时间做自己<nobr target="_blank" onmouseout="kwL(event, this);" onclick="return kwC();" style="border-bottom: 1px dotted rgb(102, 0, 255); color: rgb(102, 0, 255); background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,0, this);" id="key0" onmousemove="kwM(0);" oncontextmenu="return false;">社区</nobr>的论坛,在jive的基础上做一个页面显示所有论坛的帖子,可以称之为总版,模仿Forum类的接口做个SuperForum并且实现Cachable,不过因为这个页面刷新量比较大,虽然被Cache了,我还是想办法进行页面的缓存,感觉用jsp产生的html静态内容当缓存,页面访问速度应该有所提高。

首先想到的一种办法,是采用java.net的URLConnection把<nobr target="_blank" onmouseout="kwL(event, this);" onclick="return kwC();" style="border-bottom: 0px dotted; color: rgb(102, 0, 255); background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,1, this);" id="key1" onmousemove="kwM(1);" oncontextmenu="return false;">服务</nobr>器上的jsp抓过来做缓存,不过我觉得这样做太见外了,自己服务器上的东西,为何要用HTTP去访问.于是想另外一个办法,把jsp的out对象的输出控制到自己希望的地方.比如输出到静态文件,又或者保存成全局的字符串变量.这样的话,浏览就不需要执行jsp,只是浏览该html了.仅仅在数据有更新的时候进行一次update操作,把jsp重新输出为html.

我觉得,浏览事件比数据插入或更新发生的次数多的时候.不妨试试这个办法来提高页面访问<nobr target="_blank" onmouseout="kwL(event, this);" onclick="return kwC();" style="border-bottom: 1px dotted rgb(102, 0, 255); color: rgb(102, 0, 255); background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,6, this);" id="key3" onmousemove="kwM(6);" oncontextmenu="return false;">速度</nobr>.

整件事情有点像把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的页面

<nobr target="_blank" onmouseout="kwL(event, this);" onclick="return kwC();" style="border-bottom: 1px dotted rgb(102, 0, 255); color: rgb(102, 0, 255); background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,2, this);" id="key2" onmousemove="kwM(2);" oncontextmenu="return false;">java</nobr>源码代码如下

/** * 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实用技巧集合,jsp编程的一些小技巧总结

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

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

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

    jsp编程技巧集锦

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

    JSP JSP编程技巧

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

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

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

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

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

    jsp小技巧实例

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

    jsp分页显示

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

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

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

    jsp技巧

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

    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. **错误处理和日志记录** - 使用`&lt;error-page&gt;`配置处理特定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