具体实现:
利用
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()+
"/testservlet?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
>jsp
filter
</
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
>c
onversion
</
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
>