package cn.zuxia.pro.utils;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URLDecoder;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.struts2.ServletActionContext;
public class MappingUtil {
/**
*context:服务器上下文
*request:
*response:
*templatePath:模板路径
*htmlPath:生成的静态页面存放路径
*/
public static void getHtmlPage4Mapping(ServletContext context,
HttpServletRequest request,HttpServletResponse response,String templatePath,String htmlPath) {
//Dispatcher:分发,让request 转向到我所指定的JSP页面上去(模板)
RequestDispatcher rd=context.getRequestDispatcher(templatePath);
// 通过修改Response 中的outputStream 和 printWriter 让success.jsp 变为静态页面
//通过字节数组(os)输出流,把生成的servlet 转化为静态页面
final ByteArrayOutputStream os=new ByteArrayOutputStream();
//改写ServletOutputStream 和 pirntwriter
final ServletOutputStream stream=new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
os.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
os.write(b, off, len);
}
};
final PrintWriter pw=new PrintWriter(new OutputStreamWriter(os));
//改写 response中的输出流,让response 中数据变为静态的页面
HttpServletResponse res=new HttpServletResponseWrapper(response){
@Override
public ServletOutputStream getOutputStream() throws IOException {
return stream;
}
@Override
public PrintWriter getWriter() throws IOException {
return pw;
}
};
FileOutputStream fos=null;
//注意我是在磁盘上去写数据,路径格式\\
try {
fos=new FileOutputStream(htmlPath);
rd.include(request,res );
pw.flush();
os.writeTo(fos);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
浙公网安备 33010602011771号