package com.servlet;?? import java.io.IOException;?? 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?? package com.servlet;?? 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");?? ??????? //----指定对应JSP的HTML名称?? ??????? 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 {?? ??????? doGet(request, response);?? ??? }?? ??? public void init() throws ServletException {?? ??????? // Put your code here?? ??? }?? }?? web.xml?? ?? <servlet>?? ??? <servlet-name>ChangeHtml</servlet-name>?? ??? <servlet-class>com.servlet.ChangeHtml</servlet-class>?? ????? </servlet>?? <servlet-mapping>?? ??? <servlet-name>ChangeHtml</servlet-name>?? ??? <url-pattern>/changeHtml</url-pattern>?? </servlet-mapping>?? ?? <filter>?? ??? <filter-name>jspfilter</filter-name>?? ??? <filter-class>com.servlet.JspFilter</filter-class>?? </filter>?? <filter-mapping>?? ??? <filter-name>jspfilter</filter-name>?? ??? <url-pattern>*.jsp</url-pattern>?? </filter-mapping>?? <servlet>?? ??? <servlet-name>conversion</servlet-name>?? ??? <servlet-class>com.servlet.ConversionServlet </servlet-class>?? </servlet>?? <servlet-mapping>?? ??? <servlet-name>conversion</servlet-name>?? ??? <url-pattern>/conversion</url-pattern>?? </servlet-mapping> |