动态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程序设计有所帮助。