动态JSP页生成静态HTML的方法
本文实例讲述了动态JSP页生成静态HTML的方法。分享给大家供大家参考。具体如下:
具体实现:
利用Filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.html文件,如果不存在对应的.html文件,则将其内容读出写入指定的.html文件,再跳转到对应的.html即可。如果存在对应的.html文件,则直接跳转到对应的.html即可。
代码:
JspFilter.java:
importjava.io.BufferedReader; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.net.HttpURLConnection; importjava.net.URL; importjavax.servlet.Filter; importjavax.servlet.FilterChain; importjavax.servlet.FilterConfig; importjavax.servlet.ServletException; importjavax.servlet.ServletRequest; importjavax.servlet.ServletResponse; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; publicclassJspFilterimplementsFilter{ publicvoiddestroy(){ //TODO自动生成方法存根 } publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain)throwsIOException,ServletException{ HttpServletRequesthreq=(HttpServletRequest)request; HttpServletResponsehresp=(HttpServletResponse)response; Stringname=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); } publicvoidinit(FilterConfigarg0)throwsServletException{ //TODO自动生成方法存根 } }
ConversionServlet.java:
importjava.io.BufferedReader; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.PrintWriter; importjava.net.HttpURLConnection; importjava.net.URL; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; publicclassConversionServletextendsHttpServlet{ publicConversionServlet(){ super(); } publicvoiddestroy(){ super.destroy();//Justputs"destroy"stringinlog //Putyourcodehere } publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/html"); PrintWriterout=response.getWriter(); //----获取请求的URL StringreqTarget=request.getParameter("name"); //----指定对应JSP的HTML名称 Stringname=reqTarget.substring(reqTarget.lastIndexOf("/")+1,reqTarget.lastIndexOf(".")); //---判断是否存在对应的HTML文件 Filefile=newFile(request.getRealPath("/")+name+".html"); if(!file.exists()){//--------如果不存在对应的HTML文件 try{ file.createNewFile();//--------创建HTML文件 //-------将JSP的内容写入对应的HTML文件内 InputStreamin; StringBuffersb=newStringBuffer(""); //----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环 URLurl=newjava.net.URL(reqTarget.toString()+"?type=11"); HttpURLConnectionconnection=(HttpURLConnection)url .openConnection(); connection.setRequestProperty("User-Agent","Mozilla/4.0"); connection.connect(); in=connection.getInputStream(); java.io.BufferedReaderbreader=newBufferedReader( newInputStreamReader(in,"GBK")); StringcurrentLine; FileOutputStreamfos=newFileOutputStream(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(Exceptione){ e.printStackTrace(); } }else{ //----------如果存在指定的HTML,直接跳转到指定的HTML页 response.sendRedirect(request.getContextPath()+"/"+name+".html"); } } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); } publicvoidinit()throwsServletException{ //Putyourcodehere } }
WEB.XML配置:
<?xmlversion="1.0"encoding="UTF-8"?> <web-appversion="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程序设计有所帮助。