JSP的静态化 (转)
JSP的静态化


package com.kycm.investor.web;
import java.io.File;
import java.io.IOException;
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 FileCaptureFilter implements Filter{
private String protDirPath;
private FilterConfig filterConfig;
@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException {
//
// LoginUser loginUser = (LoginUser) ((HttpServletRequest)request).getSession().getAttribute(LoginConstant.USER);
// if (loginUser == null)
// throw new NoLoginException();
String fileName = "/forum/userId_.html";
File file = new File(filterConfig.getServletContext().getRealPath(fileName));
// 判断缓存文件是否存在或者是否重新设置了缓存内容
if (!file.exists()) {// 如果缓存文件不存在
fileName=protDirPath+fileName;
FileCaptureResponseWrapper wrapper = new FileCaptureResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, wrapper);
//得到的html 页面结果字符串
//String html = responseWrapper.toString();
// 写成html 文件
wrapper.writeFile(fileName);
// back to browser
wrapper.writeResponse();
}else{
// 转发至缓存文件
request.getRequestDispatcher(fileName).forward(request, response);
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig=arg0;
protDirPath = arg0.getServletContext().getRealPath("/");
}
}
package com.kycm.investor.web;
import java.io.CharArrayWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class FileCaptureResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
private HttpServletResponse response;
public String toString() {
return output.toString();
}
public FileCaptureResponseWrapper(HttpServletResponse response) {
super(response);
this.response = response;
output = new CharArrayWriter();
// 这个是包装PrintWriter的,让所有结果通过这个PrintWriter写入到bufferedWriter中
}
// 覆写getWriter()
public PrintWriter getWriter() {
return new PrintWriter(output);
}
/**
* 获取原始的HTML页面内容。
* @return
*/
public String getResult() {
return output.toString();
}
public void writeFile(String fileName) throws IOException {
/* FileWriter fw = new FileWriter(fileName,"utf-8");
fw.write( output.toCharArray(),"utf-8" );
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new
FileOutputStream(fileName),"utf-8"));*/
FileOutputStream fos = new FileOutputStream(fileName);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
osw.write(output.toCharArray());
osw.close();
}
public void writeResponse() throws IOException {
PrintWriter out = response.getWriter();
// 重置响应输出的内容长度
response.setContentLength(-1);
out.print(output.toCharArray());
out.flush();
out.close();
}
}
<filter>
<filter-name>FileCaptureFilter</filter-name>
<filter-class>com.kycm.investor.web.FileCaptureFilter </filter-class>
</filter>
<filter-mapping><filter-name>FileCaptureFilter</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping>

浙公网安备 33010602011771号