jsp自动生成静态页(提供思路)

jsp自动生成静态页(提供思路)

首先要获取所需数据,访问模版页这里的模板页不是html而是jsp,然后执行下列操作:

package com.movo.convert;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ConversionServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public ConversionServlet () {
        super();
    }
    
    public void destroy() {
        super.destroy();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        //获取请求的URL
        StringBuffer reqTargetBuf = new StringBuffer(URLDecoder.decode(request.getParameter("name"), "UTF-8"));
        //指定对应JSP的HTML名称
        StringBuffer nameBuf = new StringBuffer(reqTargetBuf.substring(reqTargetBuf.lastIndexOf("/") + 1,reqTargetBuf.lastIndexOf(".")));
        if(reqTargetBuf.indexOf("?") != -1){
            nameBuf.append(reqTargetBuf.toString().split("\?")[1]);
        }
        String htmlPath = new StringBuffer(request.getContextPath()).append("/").append(nameBuf).append(".html").toString();
        //判断是否存在对应的HTML文件
        File file = new File(new StringBuffer(request.getSession().getServletContext().getRealPath("/")).append(nameBuf).append(".html").toString());
        if (!file.exists()) {
            //如果不存在对应的HTML文件
            try {
                file.createNewFile();
                //创建HTML文件
                //将JSP的内容写入对应的HTML文件内
                InputStream in = null;
                StringBuffer sb = new StringBuffer();
                //注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环
                if(!reqTargetBuf.toString().contains("?")){
                    reqTargetBuf.append("?");
                }else{
                    reqTargetBuf.append("&");
                }
                reqTargetBuf.append("movo=11");
                URL url = new java.net.URL(reqTargetBuf.toString());
                //从Internet获取网页,发送请求,将网页以流的形式读回来
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //设置客户端的User Agent以解决服务器的安全设置不接受Java程序作为客户端访问的问题
                connection.setRequestProperty("User-Agent", "Mozilla/4.0");
                connection.connect();
                in = connection.getInputStream();
                java.io.BufferedReader breader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                String currentLine = null;
                OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");   
                BufferedWriter writer=new BufferedWriter(write);
                while ((currentLine = breader.readLine()) != null) {
                    sb.append(currentLine);
                    writer.write(currentLine);
                }
                if (null != breader){
                    breader.close();
                }
                if (null != writer){
                    writer.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //转到与JSP对应的HTML页,如果存在指定的HTML,直接跳转到指定的HTML页
        response.sendRedirect(htmlPath);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }
    public void init() throws ServletException {}
}