Posted on 2012-07-23 19:37
ZhouFeng 阅读(1885)
评论(0) 编辑 收藏 所属分类:
转载 、
Web开发 、
JAVA
至于将JSP页面静态化为HTML的好处,想必不用我在此解释了。之前用过一种伪处理的方式,用urlrewrite地址重定向伪装了访问路径,每次访问页面的时候还是会读取数据库,其实每次读取的数据都一样,特别是如新闻内容这种类型的页面,还是不太完美,今天在网上找了一些资料,也发现用urlrewrite的不少,我希望是能生成html文件那样的处理,还好找到一个博客,写的这样的处理方法,才发现,人家早就写了,只是当时没有下功夫去学习,今天按照上面的步骤做出来了,顺便记在这里
创建一个Servlet,主要内容如下
1 String url = "";
2 String name = "";
3
4 Charset charset = Charset.forName("UTF-8"); //设置生成文件的字符集
5 ServletContext servletContext = getServletContext();
6
7 String file_name = request.getParameter("file_name");
8 url = "/" + file_name + ".jsp"; // 你要生成的页面动态页面来源
9 name = servletContext.getRealPath("/")+"\\"+ file_name + ".html";
10 // 这是生成的html文件名,如index.html文件名字与源文件名相同
11
12 RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(url);
13
14 final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
15
16 final ServletOutputStream stream = new ServletOutputStream() {
17 public void write(byte[] data, int offset, int length) {
18 outStream.write(data, offset, length);
19 }
20
21 public void write(int b) throws IOException {
22 outStream.write(b);
23 }
24 };
25
26 final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(outStream,charset));
27
28 HttpServletResponse rep = new HttpServletResponseWrapper(response) {
29 public ServletOutputStream getOutputStream() {
30 return stream;
31 }
32
33 public PrintWriter getWriter() {
34 return printWriter;
35 }
36 };
37 requestDispatcher.include(request, rep);
38 printWriter.flush();
39 FileOutputStream fos = new FileOutputStream(name); // 把jsp输出的内容写到html文件中去
40 outStream.writeTo(fos);
41 fos.close();
42 out.print("<p align=center>OK</p>");
我是想把page.jsp这个文件转换成page.html,所以只传了一个参数,如果想把show.jsp?id=123转换成123.html,相信这也难不到大家,只不过得注意引用CSS或图片的路径
这是在网上那位仁兄贴出来的代码,并做了些修改,他还介绍了其它的些,其它的还没来得及学习,先把这些记录下来。
我在转换的时候,碰到中文问题,更改request和response的字符集都搞不定,还好参考了
http://www.blogjava.net/zphab/articles/295631.html,把字符编码加过来了,中文才算搞定了,简单的测试通过后,放在应用里就好办了。人家写出来这么多年了,才发现,惭愧呀
以上方案参考:
http://blog.csdn.net/noove_001/article/details/1953682