我的Blog我做主^_^

走向一条通往JAVA的不归路...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  54 随笔 :: 61 文章 :: 38 评论 :: 0 Trackbacks

具体实现:

         利用Filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.html文件,如果不存在对应的.html文件,则将其内容读出写入指定的.html文件,再跳转到对应的.html即可。如果存在对应的.html文件,则直接跳转到对应的.html即可。

 

代码:

JspFilter.java

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class JspFilter implements Filter {

 

    public void destroy() {

        // TODO 自动生成方法存根

    }

 

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

 

        HttpServletRequest hreq = (HttpServletRequest) request;

        HttpServletResponse hresp = (HttpServletResponse) response;

 

        String name = hreq.getRequestURL().substring(

                    hreq.getRequestURL().lastIndexOf("/") + 1,

                    hreq.getRequestURL().lastIndexOf("."));

        if (hreq.getRequestURL().indexOf(".jsp") != -1 && (null == hreq.getParameter("type") || hreq.getParameter("type").equals(""))) {           

                hresp.sendRedirect(hreq.getContextPath()+"/conversion?name="+hreq.getRequestURL());

                return ;

        }

        chain.doFilter(request, response);

    }

 

    public void init(FilterConfig arg0) throws ServletException {

        // TODO 自动生成方法存根

    }

}

 

ConversionServlet.java

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.HttpURLConnection;

import java.net.URL;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class ConversionServlet extends HttpServlet {

 

    public ConversionServlet () {

        super();

    }

 

    public void destroy() {

        super.destroy(); // Just puts "destroy" string in log

        // Put your code here

    }

 

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

 

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        //----获取请求的URL

        String reqTarget = request.getParameter("name");

        //----指定对应JSPHTML名称

        String name = reqTarget.substring(reqTarget.lastIndexOf("/") + 1,

                reqTarget.lastIndexOf("."));

        //---判断是否存在对应的HTML文件

        File file = new File(request.getRealPath("/") + name + ".html");

       

        if (!file.exists()) {   //--------如果不存在对应的HTML文件

            try {

               

                file.createNewFile();   //--------创建HTML文件

                //-------JSP的内容写入对应的HTML文件内

                InputStream in;

                StringBuffer sb = new StringBuffer("");

            //----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环

                URL url = new java.net.URL(reqTarget.toString()+"?type=11");

                HttpURLConnection connection = (HttpURLConnection) url

                        .openConnection();

                connection.setRequestProperty("User-Agent", "Mozilla/4.0");

                connection.connect();

                in = connection.getInputStream();

                java.io.BufferedReader breader = new BufferedReader(

                        new InputStreamReader(in, "GBK"));

                String currentLine;

 

                FileOutputStream fos = new FileOutputStream(file);

                while ((currentLine = breader.readLine()) != null) {

                    sb.append(currentLine);

                    fos.write(currentLine.getBytes());

                }

                if (null != breader)

                    breader.close();

                if (null != fos)

                    fos.close();

                //---------------转到与JSP对应的HTML

                response.sendRedirect(request.getContextPath()+"/"+name + ".html");

            } catch (Exception e) {

 

                e.printStackTrace();

            }

        }else{

            //----------如果存在指定的HTML,直接跳转到指定的HTML

            response.sendRedirect(request.getContextPath()+"/"+name + ".html");

        }

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {