在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把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. Win10家庭版无法打开策略组问题

    Win10家庭版无法打开策略组问题 • 复制以下代码至记事本中 @echo off pushd "%~dp0" *.mum >List.txt *.mum >>L ...

  2. Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget

    哎呀,堕落了,快有小两周没哟更新了,是在是没有动力了,浏览量连三位数都没有,是在是没有写下去的信心. 还有就是这个网易云音乐的代码量绝对是不可小视的,完全低估了这个软件的能量.昨天仔细想了一下,写不下 ...

  3. SourceTree跳过注册安装使用

    %LocalAppData%\Atlassian\SourceTree\目录 创建一个accounts.json [  {    "$id": "1",    ...

  4. zabbix-agent报错:zabbix_agentd [5922]: cannot open log: cannot create semaphore set: [28] No space left on device

    起因: 新添加完自定义监控项后重启zabbix-agent时失败,查看/var/log/zabbix/zabbix-agentd.log 发现系统提示zabbix共享内存报错 zabbix_agent ...

  5. 开始认真的学习Python

    虽然以前有多年的Fortran.C.C++以及Java开发经验,但真的开始熟悉Python还是被惊艳到了,太舒服了,看起来有如沐春风的感觉,简洁和优美,这个才是代码艺术.

  6. opengl摄像机

    摄像机/观察空间 当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向 ...

  7. [Unity Shader] 切线空间的法线贴图

    切线空间的法线贴图,可以这样理解: #纹理坐标是从0到1,它的坐标是x向右,y向下 #顶点坐标是从-1到-1,坐标是x向右,y向上 1 由表面上某点的切线Tangent.副切线Bitangent.法线 ...

  8. 如何配置php客户端(phpredis)并连接Redis--华为DCS for Redis使用经验系列

    使用php连接Redis.Memcache等都需要进行扩展,以CentOS为例,介绍phpredis的客户端环境搭建. 第0步:准备工作 华为云上购买1台弹性云服务器ECS(我选了CentOS 6.3 ...

  9. 【Docker】第三篇 Docker容器管理

    一.Docker容器概述: 简单理解容器是镜像的一个实例. 镜像是静态的只读文件,而容器的运行需要可写文件层. 二.创建容器 [root@web130 ~]# docker create -it ub ...

  10. RN 离线包集成后需要注意的一些问题

    1.ReactNative 开发中如何去掉iOS状态栏的"Loading from..." 等淡黑色的弹框,很难看? 在 AppDelegate.h 中引入: #import &l ...