【转载】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. 2019年春季学期《C语言程序设计II》助教注意事项

    本学期<C语言程序设计II>课程安排 理论课时24(1-12周),实验课时8(13周),课程设计课时16(14-15周) 理论课教学内容 附:教学进度表 本学期实验课和课程设计参考教材 & ...

  2. PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植

    PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植 一:前言 这段时间有个朋友加微信请求帮忙调试一块PCIe采集卡.该采集卡使用xilinx xc ...

  3. 20155202张旭 Exp3 免杀原理与实践

    20155202张旭 Exp3 免杀原理与实践 AV厂商检测恶意软件的方式主流的就三种: 基于特征码的检测 启发式恶意软件检测 基于行为的恶意软件检测 我们要做的就是让我们的恶意软件没法被这三种方式找 ...

  4. C语言如何向系统接要存

    C语言如何向系统接要存,就有这么三种方式: 1.向栈要. 2.向堆要. 3.向数据段要. 这一下就扯出了三种内存空间,内存空间的本质是一样的,一个地址对应一个方框,方框里可以放数据.但是为了更好的去 ...

  5. STM32-M0中断优先级介绍

    先解释中断优先级,后面讲代码的实现. 差异:M0的中断优先级相比于M4,没有用到分组,且只用到了2个bit位(即0~3)来设置,数值越小,优先级越高:同等优先级,根据终端号的大小来决定谁先执行. 根据 ...

  6. 07-django项目

    1.sql注入,xss攻击,csrf, sql注入 把sql命令插入到web表单,然后提交到所在页面请求,从而达到欺骗服务器执行恶意的sql命令 解决方法:不要使用动态拼接sql,把指令和数据分开,参 ...

  7. 解决 引入本地jar包后 maven无法编译的问题及部署war包缺失本地jar包的问题

    参考:https://blog.csdn.net/wang864676212/article/details/82626922 pom.xml 引入 <plugin> <plugin ...

  8. [CF1083F]The Fair Nut and Amusing Xor[差分+同余分类+根号分治+分块]

    题意 给定两个长度为 \(n\) 的序列 \(\{a_i\}\) 与 \(\{b_i\}\),你需要求出它们的相似度.,我们定义这两个序列的相似度为将其中一个序列转化为另一个序列所需的最小操作次数.一 ...

  9. 命令行模式和python交互模式

    一.命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:>:. 二.Python交互模式 在命令行模式下敲命令python,就看到类似如下的一堆文本输出 ...

  10. Spring Boot(七):Mybatis 多数据源最简解决方案

    说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们遇到的情况是后者,网上找了很多,大都是根据 Jpa 来做多数据源解决方案,要不就是老的 Spring 多 ...