【转载】JSP生成静态Html页面

在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把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静态页面.通常有2种常用的方式: 1.伪静态,使用URL Rewriter 2.纯静态,本文中代码实现 ...

  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. neo4j----创建索引

    创建索引 create index on:Student(name) 删除索引 drop index on:Student(name) 创建唯一索引 create constraint on (s:T ...

  2. Eclipse-设置启动JDK版本

    打开eclipse安装目录下的eclipse.ini文件,将红色内容加入 -vm ../Java/jdk1.6.0_26/bin (或者指向具体目录:D:/software/jdk_1.8u91/bi ...

  3. Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储? - z

    这几天在做Android应用的远程更新功能,将下载的更新包放在移动设备上指定的目录.用的是  Environment.getExternalStorageDirectory() 这个方法,然后在获取的 ...

  4. 字典学习(Dictionary Learning, KSVD)详解

    注:字典学习也是一种数据降维的方法,这里我用到SVD的知识,对SVD不太理解的地方,可以看看这篇博客:<SVD(奇异值分解)小结 >. 1.字典学习思想 字典学习的思想应该源来实际生活中的 ...

  5. libgdx自制简易版Don't Touch The White Tile

    Don't Toutch The White说来也奇快,本来没什么难的,但是在欧美ios榜上却雄踞榜首好长时间.即使是在国内,也很火,还真是想不通,谁能解释下,难道真是所谓的抓住了用户的G点,或是这些 ...

  6. 《Effective Java》学习笔记 —— 通用程序设计

    本章主要讨论局部变量.控制结构.类库.反射.本地方法的用法及代码优化和命名惯例. 第45条 将局部变量的作用域最小化 * 在第一次使用的它的地方声明局部变量(就近原则). * 几乎每个局部变量的声明都 ...

  7. vue初学实践之路——vue简单日历组件(2)

    上一篇我们已经实现了基本的日历显示功能,这一次我们要加上预定的功能 废话不多说,上代码 <div id="calendar"> <!-- 年份 月份 --> ...

  8. AppStore下载Xcode的文件

    有的时候团队开发,手机系统一升级,那么对应的Xcode也就需要升级了,由于团队开发,可能一下要把所有人的都升级一下,那么最简单的就是下好一份Xcode然后分享给大家. 但是有的时候你就会发现,通过Ap ...

  9. WayOS计费对接(零点计费系统)详细教程

    零点计费系统开发也有两年了,一直都是自己和朋友在使用,今年开始有对外免费开发体验的想法,在此简单介绍一下wayos和零点计费的对接教程. 可到官网www.feidian8.com里面的首页点击查看零点 ...

  10. idou老师教你学Istio :如何用istio实现监控和日志采集

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...