public class CreateStaticHTMLPage {
HttpServlet da= new HttpServlet() {
};
public void create(HttpServletRequest request, HttpServletResponse response,
ServletContext servletContext, String fileName, String fileFullPath, String jspPath)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");// 设置HTML结果流编码(即HTML文件编码)
RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);// 得到JSP资源
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 用于从ServletOutputStream中接收资源
final ServletOutputStream servletOuputStream = new ServletOutputStream() {// 用于从HttpServletResponse中接收资源
/*
*/
public void write(byte[] b, int off, int len) {
byteArrayOutputStream.write(b, off, len);
}
public void write(int b) {
byteArrayOutputStream.write(b);
}
@Override
public boolean isReady() {
// TODO Auto-generated method stub
return false;
}
@Override
public void setWriteListener(WriteListener arg0) {
}
};
final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));// 把转换字节流转换成字符流
HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response) {// 用于从response获取结果流资源
/*
*/
public ServletOutputStream getOutputStream() {
return servletOuputStream;
}
public PrintWriter getWriter() {
return printWriter;
}
};
rd.include(request, httpServletResponse);// 发送结果流(把带有两个输出流的response发到相应jsp页面)
printWriter.flush();// 刷新缓冲区,把缓冲区的数据输出
/*
*
* 也就是说,把带有两个输出流httpServletResponse发送到对应jsp文件,并printWrite.flush()之后,
* servletOuputStream和printwrite都带有相同的html的内容,就是上述HTML内容
*/
FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath);
/*
此时的bytearrayoutputstream已经具有了所有的jsp中servletoutputstream的内容*/
/*这里的byteArrayOutputStream流里面又有什么内容,也很迷惑*/
byteArrayOutputStream.writeTo(fileOutputStream);// 把byteArrayOuputStream中的资源全部写入到fileOuputStream中
fileOutputStream.close();// 关闭输出流,并释放相关资源
response.sendRedirect(fileName);// 发送指定文件流到客户端
}
}
你的问题是什么呢? 所谓静态化,就是页面的CSS、以及各种布局都已经固定住了,只是把模板的值替换一下