动态JSP页生成静态HTML代码

动态JSP页生成静态HTML代码

具体实现:利用 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 
//Java教程:http://www.javaweb.cc

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 配置:


< 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 >


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值