前段时间做自己<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编程中常用的js技术。 1.JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4. 两级下拉列表框联动菜单? 5. java中如何把一个目录...
jsp 显示内容缓存技巧 前段时间做自己社区的论坛,在jive 的基础上做一个页面显示所有论坛的帖子,可以称之为总版,模仿forum 类的接口做个superforum 并且实现cachable,不过因为这个页面刷新量比较大,虽然被cache ...
JSP编程技巧集锦 <br>需要者请联系:e_mail:fzlotuscn@yahoo.com.cn QQ:595563946<br><br>目 录 <br>1. JSP编程中常用的js技术 2. 在下拉列表框里选择一个值后跳出新窗口? 3. 在JSP中启动execl? 4...
2. **分离关注点**:将业务逻辑移到JavaBeans,保持JSP页面专注于显示。 3. **使用布局模板**:通过`<jsp:include>`和`<jsp:useBean>`实现页面复用和布局管理。 4. **错误处理**:确保有合适的异常处理机制,避免在...
**JSP分页显示技术详解** 在Web开发中,数据量较大的时候,通常需要采用分页的方式来展示数据,以提高用户体验并减轻服务器负担。JSP(JavaServer Pages)作为Java平台上的动态网页技术,提供了丰富的功能来实现这...
此外,通过JSP显示这些数据,可以使用JSTL的`<c:forEach>`标签遍历列表,生成表格或列表视图。 七、异常处理与错误页面 表示层类应包含处理异常的机制,确保在出现错误时能优雅地展示错误信息,而不是显示不友好的...
缓存静态内容;使用session管理用户状态时,注意清理无用的session。 这些小技巧涵盖了JSP开发中的常见问题和解决方案,通过学习和实践这些技巧,你可以更有效地编写和维护JSP应用程序,提高开发效率,同时提升用户...
**JSP分页显示**是Web开发中常见的...通过以上内容,我们可以了解到JSP分页显示的基本原理和实现方法。在实际项目中,我们需要根据具体需求和性能要求,灵活运用这些技术和策略,为用户提供高效、流畅的数据浏览体验。
10. **优化JSP缓存**:通过设置合适的缓存策略,可以减少服务器对JSP页面的重新编译,提高响应速度。 11. **使用自定义标签库**:创建和使用自定义标签库可以使代码更模块化,提高代码复用性,并且让页面更易读。 ...
使用`<jsp:include page="header.jsp" flush="true" />`可以缓存静态内容,提高页面加载速度。同时,合理使用session和cookie,避免不必要的网络传输。 ### 8. **国际化与本地化** 通过`<fmt:message>`标签和资源包...
本文将围绕“jsp网页设计40种常见的网页技巧”这一主题,结合JavaScript的应用,来深入探讨一些实用的技术点。 1. **响应式设计**:确保你的JSP页面能在不同设备上自适应显示,利用CSS3的媒体查询实现。 2. **模板...
在讨论JSP页面中图片居中的问题时,首先需要掌握一些基础的CSS布局知识,包括display属性的使用、垂直居中的方法、margin属性的自动居中技巧以及W3C标准对页面渲染的影响。 当涉及到在div中居中一张图片时,CSS是...
对于初学者,可以通过分析和修改这个源代码来学习JSP开发、数据库交互、MVC模式应用以及Web应用的部署和调试技巧。 综上所述,"jsp新闻发布系统源代码"是一个完整的项目实例,它涵盖了JSP开发中的多种技术和实践,...
- 业务逻辑应放在JavaBean或Servlet中,JSP仅负责显示数据,遵循MVC模式。 - 使用Model2架构,提高代码的可维护性和可扩展性。 7. **错误处理和日志记录** - 使用`<error-page>`配置处理特定HTTP错误代码的页面...
3. **动态表格展示**:使用JSP和JSTL显示动态生成的数据表格,体现JSP的动态内容生成能力。 4. **邮件发送功能**:结合JavaMail API,利用JSP发送电子邮件。 **六、最佳实践与进阶技巧** 1. **MVC设计模式**:了解...
可以通过使用缓存、节流或防抖函数等技巧来优化。 6. 兼容性处理:不同的浏览器可能对某些JavaScript特性支持不一,因此需要考虑兼容性问题,确保在各种环境下都能正常工作。 通过"HighlightWord"这个文件,我们...
JSP技术的核心在于它的“页面组件”,这些组件在服务器端运行,并能够生成HTML、XML或其他格式的文档,然后发送到客户端进行显示。 ### JSP基本概念 1. **JSP页面结构**:一个JSP页面可以包含HTML、CSS、...
2. **Servlet控制逻辑,JSP显示视图**:推荐采用MVC(Model-View-Controller)架构,Servlet处理业务逻辑,JSP负责展示数据。 ### 四、JSP实战 1. **简单实例**:创建一个Hello, World! JSP页面,了解JSP运行机制...
JSP分页技巧不仅涉及对变量和SQL查询的合理设计,还需要关注性能优化,例如缓存机制的引入、数据库索引的优化等,以确保在处理大量数据时仍能保持良好的响应速度。此外,随着技术的发展,现代Web框架如Spring Boot...
**JSP实现BBS论坛** 是一种常见的Web应用程序开发任务,尤其在软件工程课程设计和毕业设计中常见。它涉及到多种技术的综合运用,...通过分析这些文件,可以进一步学习和理解JSP实现BBS论坛的具体实现细节和编程技巧。