/**
* ServletContext的路径一定要加"/"相对于当前路径
* @url为将要生成静态页面的 jsp文件如:http://localhost/index.jsp的执行结果.
* @name为生成后的htm文件名及保存位置.
* @name是根据用户登录的用户名来作为文件名保存.
*/
url = "/"+file_name+".jsp";
name="./doc/xxzx/"+session_username+file_name+".htm";
/**
* @使用RequestDispatcher重定向而不用redirect主要是因为前面的可以将form传给目标URL,而后者能.
* @dispatcher类型对应了RequestDispatcher.forward方法,而redirect类型则是HttpServletResponse.sendRedirect方法.
* @但是forward方法确实是不会使得其参数中包含的URL在IE地址栏中显示出来的,在下面一个地方这个东东让我忙了很久的.
*/
RequestDispatcher rd = sc.getRequestDispatcher(url);
/**
* @ByteArrayOutputStream可以捕获内存缓冲区的数据,转换成字节数组,实现将数据从高层次的形式转化成低层次的形式.
* @public ByteArrayOutputStream()创建一个新的字节数组输出流。缓冲区初始容量为 32 字节, 必要时可增加其尺寸.
*
* @public synchronized void write(byte b[],int off,int len)
* @将指定字节数组中从偏移量 off 开始的 len 个字节写入该字节数组输出流。参数:(b - 数据.off - 数据的起始偏移量.len - 写入的字节数.)
*
* @write(int)将指定字节写入该字节数组输出流。
*/
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ServletOutputStream stream = new ServletOutputStream()
{
public void write(byte[] data, int offset, int length)
{
os.write(data, offset, length);
}
public void write(int b) throws IOException
{
os.write(b);
}
};
/**
* @调用PrintWriter实现缓冲流中的内容写出到文件中去.
* @定义HttpServletResponse参数让其传到其它界面
*/
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
HttpServletResponse rep = new HttpServletResponseWrapper(response)
{
public ServletOutputStream getOutputStream()
{
return stream;
}
public PrintWriter getWriter()
{
return pw;
}
};
/**
* @RequestDispatcher的include()方法将把Request Dispatcher资源的输出包含到当前输出中
*/
rd.include(request, rep);
/**
* @flush()方法强制输出后刷新缓冲区,清空缓冲区.
*/
pw.flush();
//把jsp输出的内容写到xxx.htm
FileOutputStream fos = new FileOutputStream(name);
//把os的内部缓冲区写到fos文件中去.
os.writeTo(fos);
fos.close();
PrintWriter out=response.getWriter();
out.print("<p align=center><font size=3 color=red>Success!Andrew</font></p>");
out.print("<p align=center><font size=3 color=red>"+session_username+file_name+"</font></p>");
/**
* @实现页面转向
* @让访问者直接生成的页面
* @response.sendRedirect(url)转址会在地址栏中显示目标URL值.
*/
//HttpServletResponse.sendRedirect("./"+session_username+".htm");
response.sendRedirect("./"+session_username+file_name+".htm");
/*==============这个转向不会在地址栏显示目标URL===================*/
// RequestDispatcher rdo = getServletContext().getRequestDispatcher("/"+session_username+".htm");
//rdo.forward(request, response);
/*===============================================*/
}
}