12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 2840|回复: 19
打印 上一主题 下一主题

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

[复制链接]

1026

主题

1

听众

6011

积分

高级设计师

Rank: 6Rank: 6

纳金币
5996
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2011-8-1 17:20:26 |只看该作者 |倒序浏览
【赛迪网讯】随着网站的不断扩大,首页面的内容越来越多,甚至要放置赢利性质的广告,而这些内容,每次被用户访问时都是从数据库中读取或者经过业务逻辑处理获得结果,这样会严重影响页面的加载速度,很多网站都是使用静态的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 cons***ctor 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 cons***ctor.

*/

public CreateHTMLFilter() {

// TODO Auto-generated cons***ctor 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

/*
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

沙发
发表于 2011-8-1 21:01:22 |只看该作者
看下
回复

使用道具 举报

797

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
5568
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2011-8-9 15:04:11 |只看该作者
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-2-12 23:28:58 |只看该作者
沙发不解释
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-4-16 23:19:01 |只看该作者
呵呵,很好,方便罗。
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2012-4-17 23:33:56 |只看该作者
先顶上去,偶要高亮加精鸟!
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2012-5-7 23:25:52 |只看该作者
读铁系缘分,顶铁系友情
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-5-25 23:24:28 |只看该作者
你们都躲开,我来顶
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2012-5-30 23:18:10 |只看该作者
顶!学习了!阅!
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2012-7-12 23:28:21 |只看该作者
很有心,部分已收录自用,谢谢
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-27 17:27 , Processed in 0.177315 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部