动态JSP页生成静态HTML的方法
程序员文章站
2022-05-03 16:25:13
本文实例讲述了动态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程序设计有所帮助。
上一篇: 记录集内随机取记录的代码