在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把jsp的动态页面转为html静态页面。通常有2种常用的方式:

1.伪静态,使用URL Rewriter

2.纯静态,本文中代码实现的就是纯静态,Servlet实现。

代码:

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.io.OutputStreamWriter;
  5. import java.io.PrintWriter;
  6. import javax.servlet.RequestDispatcher;
  7. import javax.servlet.ServletContext;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletOutputStream;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import javax.servlet.http.HttpServletResponseWrapper;
  14. /**
  15. * @Description: jsp生成html页面--使用
  16. * @author Alpha
  17. * @date 2015年9月17日 下午1:24:27
  18. * @version V1.0
  19. */
  20. public class ToHtml extends HttpServlet {
  21. private static final long serialVersionUID = -7294946376649752356L;
  22. public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  23. ServletContext sc = getServletContext();//为你的应用的上下文路径。
  24. String fileName = request.getParameter("fileName");// 你要访问的jsp
  25. // 则你访问这个servlet时加参数.如http://localhost/test/toHtml?fileName=index
  26. String url = "/" + fileName + ".jsp";// 你要生成的页面的文件名。扩展名为jsp
  27. String name = sc.getRealPath("/") + fileName + ".html";// 这是生成的html文件名
  28. RequestDispatcher rd = sc.getRequestDispatcher(url);
  29. final ByteArrayOutputStream os = new ByteArrayOutputStream();
  30. final ServletOutputStream stream = new ServletOutputStream() {
  31. public void write(byte[] data, int offset, int length) {
  32. os.write(data, offset, length);
  33. }
  34. public void write(int b) throws IOException {
  35. os.write(b);
  36. }
  37. };
  38. final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
  39. HttpServletResponse rep = new HttpServletResponseWrapper(response) {
  40. public ServletOutputStream getOutputStream() {
  41. return stream;
  42. }
  43. public PrintWriter getWriter() {
  44. return pw;
  45. }
  46. };
  47. rd.include(request, rep);
  48. pw.flush();
  49. FileOutputStream fos = new FileOutputStream(name); // 把jsp 输出的内容写到xxx.html
  50. os.writeTo(fos);
  51. fos.close();
  52. PrintWriter out = response.getWriter();
  53. out.print("SUCCESS");
  54. }
  55. }

web.xml 配置:

  1. <!-- 生成静态页面 -->
  2. <servlet>
  3. <servlet-name>jspToHtmlServlet</servlet-name>
  4. <servlet-class>com.alpha.servlet.ToHtml</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>jspToHtmlServlet</servlet-name>
  8. <url-pattern>*.2html</url-pattern>
  9. </servlet-mapping>

生成方法:

http://localhost:8080/test/idnex.2html?fileName=index 生成首页

【转载】JSP生成静态Html页面的更多相关文章

  1. JSP生成静态Html页面

    [转载]JSP生成静态Html页面 在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把jsp的动态页面转为html静态页面.通常有2种常用的方式: 1.伪静态,使用URL Rewr ...

  2. JSP生成静态html网页

    /** * jsp生成静态html网页 */ public class ToHtml extends HttpServlet { public void service(HttpServletRequ ...

  3. 利用PHP的ob函数实现生成静态化页面

    之前用过一些开源的CMS管理系统,当时就很好奇后台中的生成HTML静态文件是怎么实现的.今天和同事讨论了下,没想到同事之前做过这类的生成静态页面的功能,果断向他请教了下. 经他讲解后,才知道其实生成静 ...

  4. 用php生成静态html页面(通用2种方法)

    因为每次用户点击动态链接的时候都会对服务器发送数据查询的要求 对于一个访问量可能达百万千万级别的网站来说 这无疑是服务器一个大大的负担 所以把动态数据转换成静态html页面就成了节省人力物力的首选 因 ...

  5. java使用freemarker生成静态html页面

    1. 模板文件static.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ...

  6. springboot2.0结合freemarker生成静态化页面

    目录 1. pom.xml配置 2. application.yml配置 3. 使用模板文件静态化 3.1 创建测试类,编写测试方法 3.2 使用模板字符串静态化 使用freemarker将页面生成h ...

  7. 将给定数据源生成静态HTML页面持久化到项目之外的硬盘

    一.java代码 设置好数据源map Map<String,String> map=new HashMap<>(); map.put("knowledgeName&q ...

  8. PHP基础-生成静态html页面原理是怎样

    设置example.html为模板文件,然后按照此模板文件生成article-1.html~article-5.html,以此来做简单的演示,代码如下: <?php//将数据存入二维数组$con ...

  9. jsp生成html

    这几天公司需要生成静态的HTML页面以减小数据库与服务器的压力和负担,于是在网络上一阵狂搜,找到几篇相当不错的文章和一些相当有用的资料.为了方便,我整理在自己的BLOG,以供参考! 在接下来的应用中, ...

随机推荐

  1. 菜鸟vimer成长记——第3章、文件

    上一章一直在讲的是vim的文本的操作,本章主要讲的是vim的文件操作. 本章的有些概念和传统的文本编辑器也不尽相同.所以需要注意概念或者切切说是思维习惯的区别. vim 允许在一个编辑会话中编辑多个文 ...

  2. gh-ost的延迟控制机制

    root@sbtest04:46:19>select * from _yougege_ghc limit 10\G*************************** 1. row ***** ...

  3. vs2012调试时,抛出异常的等待时间很慢,原来是QQ电脑管家搞的鬼。

    vs2012调试时,抛出异常的等待时间以前都正常,不知什么时候起变得很慢,就是出错以后要等30秒以上才会提示,一直找不到原因. 今天看了一下任务管理器,发现有个QQpcrTP进程(好像是,因为卸载了) ...

  4. java随记

    jdk1.8中新增了 LocalDate 与 LocalDateTime等类来解决日期处理方法,同时引入了一个新的类DateTimeFormatter来解决日期格式化问题. LocalDateTime ...

  5. Qt-网易云音乐界面实现-6 迷你个人中心实现

    这个界面除了麻烦耗时,没有啥技术含量.暂时我也就把它称为迷你个人中心,因为后面还有一个个人中心了. 先看下完成品 左侧是我的,右侧是原生 个人感觉还可以吧,哈哈哈.给我自己奖励一个鸡腿. 看下头文件 ...

  6. Python输出格式全总结

    输入输出 有几种方法可以显示程序的输出:数据可以以人类可读的形式打印出来,或者写入文件以供将来使用.本章将讨论一些可能性. 更漂亮的输出格式 到目前为止,我们遇到了两种写入值的方法:表达式语句 和 p ...

  7. 4.three.js中的坐标系

    Three.js中的坐标系 three.js中坐标系使用的是左手坐标系 左手坐标系和右手坐标系的对比: 当然three.js中使用的是右手坐标系 three.js中的旋转的定义 但是three.js中 ...

  8. Python更新库

    查看系统里过期的python库,可以用pip命令 [root@vnode33 sim-enb-sgi]# pip list #列出所有安装的库 Package Version ------------ ...

  9. final发布视频展示博客

    Part One [探路者]选题展示视频链接: http://v.youku.com/v_show/id_XMzIxMDM2MTQ1Ng==.html?spm=a2h3j.8428770.341605 ...

  10. 第十二节 Linux下软件安装

    apt-get:apt-get使用各用于处理apt包的公用程序集,我们可以用它来在线安装.卸载和升级软件包等,下面列出一些apt-get包含的常用的一些工具 常用参数: 重新安装: 软件升级: