【转载】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. JavaScript HTML DOM,BOM

    DOM DOM 是一个 W3C (万维网联盟) 标准. DOM 定义了用于访问文档的标准: "W3C 文档对象模型 (DOM) 是一个平台和与语言无关的界面, 允许程序和脚本动态访问和更新文 ...

  2. Jredis的使用范例

    简单使用 public class JedisTest { private static final Logger LOGGER = LoggerFactory.getLogger(JedisTest ...

  3. HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. 如何使用jstack分析线程状态

    背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占用着cpu资源,那又如何查看占用cpu较高 ...

  5. 20155316 Exp1 PC平台逆向破解(5)M

    前绪 实验收获与感想 初步从三个途径了解了什么是缓冲区溢出以及如何简单实现它,对汇编与反汇编有更直观的了解. 什么是漏洞?漏洞有什么危害? 漏洞是指机器体制设计时所没有顾及到的.可以被利用的bug,放 ...

  6. Android开发——为EditText添加烟花效果的实现

    )什么时候发射烟花:监听EditText的文字改变,获取文字数量的变化以确定风的方向,还有获取光标的位置确定爆炸的位置.光标的位置没有具体的方法确定坐标,要通过反射自己计算. 2.  主要实现类 库里 ...

  7. Word2010去除灰色中括号标记

    在使用的Word复制内容时,有时会出现这种情况: 去除灰色中括号 出现这种情况,是因为无意中插入了书签.解决方案如下: 或者直接使用ctrl+shift+F5,选择要删除的标签

  8. 2PC/3PC到底是啥

    讨论 提到2PC/3PC首先想到的是它是一致性协议,而且经常把它和Paxos协议放在一起比较,并且经常看到这样的说法"世上只有一种一致性算法,那就是Paxos",2PC/3PC并不 ...

  9. Notepad++常用插件

    Notepad++常用插件 1.CCompletion 进行文本的方法查找的工具. 会点击Ccompletion中的CCompletion菜单,就会出现菜单选择框 2.Compare 进行文本比较的工 ...

  10. L2-031 深入虎穴(BFS)

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...