具体实现:
利用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(ServletRequest request, ServletResponse response,
FilterChain chain)throwsIOException, 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);
}
publicvoidinit(FilterConfig arg0)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();// Just puts "destroy" string in log
// Put your code here
}
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, 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 =newFile(request.getRealPath("/") + name +".html");
if(!file.exists()) {//--------如果不存在对应的HTML文件
try{
file.createNewFile(); //--------创建HTML文件
//-------将JSP的内容写入对应的HTML文件内
InputStream in;
StringBuffer sb =newStringBuffer("");
//----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环
URL url =newjava.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 =newBufferedReader(
newInputStreamReader(in,"GBK"));
String currentLine;
FileOutputStream fos =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(Exception e) {
e.printStackTrace();
}
}else{
//----------如果存在指定的HTML,直接跳转到指定的HTML页
response.sendRedirect(request.getContextPath()+"/"+name +".html");
}
}
publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
doGet(request, response);
}
publicvoidinit()throwsServletException {
// Put your code here
}
}
WEB.XML配置:
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">
jspfilter
com.beanutil.JspFilter
jspfilter
*.jsp
conversion
com.beanutil.ConversionServlet
conversion
/conversion