zoukankan      html  css  js  c++  java
  • 【转载】JSP生成静态Html页面

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

    1.伪静态,使用URL Rewriter

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

    代码:

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

    web.xml 配置:

    [html] view plain copy
     
    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 生成首页

  • 相关阅读:
    echarts仪表盘如何设置图例(legend)
    js上传限制文件大小
    js下载文件及命名(兼容多浏览器)
    为什么每个浏览器都有Mozilla字样(转载于知乎shadow)
    用JS做一个简单的电商产品放大镜功能
    unity下跨平台excel读写
    无限大地图:lightmap拆分
    Unity 打包总结和资源的优化和处理
    Unity3d: 资源释放时存储空间不足引发的思考和遇到的问题
    profiler内存优化:警惕回调函数
  • 原文地址:https://www.cnblogs.com/tengqiuyu/p/7294184.html
Copyright © 2011-2022 走看看