【转载】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 生成首页

原文地址:https://www.cnblogs.com/tengqiuyu/p/7294184.html