动态JSP如何生成静态HTML【方法一】
2012-08-15 21:49
489 查看
具体实现:
利用 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 >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 >
利用 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 >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 >
相关文章推荐
- JSP生成静态HTML页面的几种方法
- 根据动态jsp页面生成静态HTML页面
- 自动把动态的jsp页面(或静态html)生成PDF文档,并且上传至服务器
- JSP生成静态HTML页面的实践方法和设计思路
- 动态JSP页生成静态HTML的方法
- 动态jsp生成静态html网页
- 执行JSP后生成HTML静态文件【方法二】
- 动态ASP网站生成HTM、HTML静态网站方法
- 动态JSP页生成静态HTML的方法
- php读取动态页面生成静态html文件的方法
- JSP页面的静态包含和动态包含使用方法
- jsp中forward的静态和动态方法
- JSP验证码动态生成方法
- 使用FreeMarker/Jsp(WebWork2)生成静态/动态RSS文件
- JSP-讲解(生成java类、静态导入与动态导入)
- 通用PHP动态生成静态HTML网页的代码
- 将动态aspx页面转换成为静态html页面的几种方法
- 将所有的.jsp动态页面变成.html静态页面
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面
- 如何抓取Js动态生成html的页面?