Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 718|回复: 0

Java Server Pages生成web静态页面的最佳实践

[复制链接]

该用户从未签到

发表于 2011-8-3 23:23:58 | 显示全部楼层 |阅读模式
随着网站的不断扩大,首页面的内容越来越多,甚至要放置赢利性质的广告,而这些内容,每次被用户访问时都是从数据库中读取或者经过业务逻辑处理获得结果,这样会严重影响页面的加载速度,很多网站都是使用静态的HTML首页面来结局问题。 实现过程 1. 创建jsp页面,添加测试内容 2. 编写MyOutputStream类他继承自ServletOutputStream类并重写write()方法,使用自己的字节数组输出流实现了数据输出。关键代码如下: import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.ServletOutputStream; public class MyOutputStream extends ServletOutputStream { private ByteArrayOutputStream stream; public MyOutputStream(ByteArrayOutputStream stream){ this.stream=stream; } @Override public void write(int arg0) throws IOException { // TODO Auto-generated method stub stream.write(arg0); } } 3. 编写ResponseWrapper类,他继承自HttpServletResponseWrapper类,并重写getOutputStream()和getWriter()方法,返回本类定义的输出流,自定义的的getContent()方法可以获取这些输出流的数据。关键代码如下。 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import com.stream.MyOutputStream; public class ResponseWrapper extends HttpServletResponseWrapper { private MyOutputStream stream; private ByteArrayOutputStream byteStream; private PrintWriter pw; public ResponseWrapper(HttpServletResponse response) { super(response); // TODO Auto-generated constructor stub this.byteStream=new ByteArrayOutputStream(); this.stream=new MyOutputStream(this.byteStream); this.pw=new PrintWriter(this.byteStream); } @Override public ServletOutputStream getOutputStream() throws IOException { // TODO Auto-generated method stub return stream; } @Override public PrintWriter getWriter() throws IOException { // TODO Auto-generated method stub return this.pw; } public String getContent(){ //取出空格,必须否则在页面中会有其他字符 return this.byteStream.toString().trim(); } } 4. 编写CreateHTMLFilter过滤器,实现Filter接口,在doFilter()方法中实现业务。 import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.stream.MyOutputStream; import com.wrapper.ResponseWrapper; /** * Servlet Filter implementation class CreateHTMLFilter */ public class CreateHTMLFilter implements Filter { /** * Default constructor. */ public CreateHTMLFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here HttpServletResponse res = (HttpServletResponse) response; ResponseWrapper wrapper = new ResponseWrapper(res); // pass the request along the filter chain chain.doFilter(request, wrapper); wrapper.getWriter().flush(); HttpServletRequest req = (HttpServletRequest) request; String path = req.getSession().getServletContext() .getRealPath("index.jsp"); System.out.println(path); File file = new File(path); // 创建要生成的html页面对象 File htmlFile = new File(file.getParentFile(), "index.html"); // html页面创建时间 Date htmlDate = null; Date now = new Date(); if (!htmlFile.exists()) { htmlFile.createNewFile(); } else { htmlDate = new Date(htmlFile.lastModified()); } // 根据文件的创建时间判断是否需要新建html页面 if (htmlDate == null || htmlDate.getDate() != now.getDate()) { FileOutputStream fos = new FileOutputStream(htmlFile); DataOutputStream dos = new DataOutputStream(fos); System.out.println(wrapper.getContent().trim()); dos.writeUTF(wrapper.getContent()); dos.close(); } request.getRequestDispatcher("index.html").forward(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } } 5. web.xml文件配置如下: xmlns="http://java.sun.com/xml/ns/javaEE" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> dynamic index.jsp CreateHTMLFilter CreateHTMLFilter com.filter.CreateHTMLFilter CreateHTMLFilter /*
6. 测试,可以看到你想要的结果了
回复

使用道具 举报

该用户从未签到

发表于 2011-9-22 10:48:13 | 显示全部楼层
怎么一团麻啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-6-17 11:53 , Processed in 0.366312 second(s), 52 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表