欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

动态JSP页生成静态HTML的方法

程序员文章站 2022-08-10 18:33:34
本文实例讲述了动态jsp页生成静态html的方法。分享给大家供大家参考。具体如下: 具体实现: 利用filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.ht...

本文实例讲述了动态jsp页生成静态html的方法。分享给大家供大家参考。具体如下:

具体实现:

利用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");
    //----指定对应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配置:

<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
  xsi:schemalocation="http://java.sun.com/xml/ns/j2ee
  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <filter>
  <filter-name>jspfilter</filter-name>
  <filter-class>com.beanutil.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.beanutil.conversionservlet </servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>conversion</servlet-name>
  <url-pattern>/conversion</url-pattern>
 </servlet-mapping>
</web-app>

希望本文所述对大家的jsp程序设计有所帮助。