您的位置:首页 > Web前端 > JavaScript

动态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 >
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: