如何(怎么)获取jsp输出内容?用HttpServletResponseWrapper吧
来源:互联网 发布:网络规划设计师下午 编辑:程序博客网 时间:2024/04/27 14:24
总的思路是,利用HttpServletResponseWrapper封装HttpServletResponse,使HttpServletResponse采用我们自己定义的输入流(OutputStream)。这样,我们就可以通过这个OutputStream得到目标jsp页面内容。
这里有两个关键点。1、怎样用当前HttpServletRequest访问目标jsp而不跳转;2、怎样构建一个OutputStream,且让HttpServletResponse获得的jsp内容输入到这个OutputStream。如果解决了这两个问题,那一切好办了。
看代码:
代码1:在不跳转下访问目标jsp。就是利用RequestDispatcher.include(ServletRequest request, ServletResponse response)。该方法把RequestDispatcher指向的目标页面写到response中。
- public static String getJspOutput(String jsppath, HttpServletRequest request, HttpServletResponse response)
- throws Exception
- {
- WrapperResponse wrapperResponse = new WrapperResponse(response);
- request.getRequestDispatcher(jsppath).include(request, wrapperResponse);
- return wrapperResponse.getContent();
- }
代码2:HttpServletResponse的封装类,继承自HttpServletResponseWrapper。其核心是构建一个OutputStream,且让HttpServletResponse获得的jsp内容输入到这个OutputStream。
package com.bobrow.framework.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpServletResponseWrapper;
public class WrapperResponse extends HttpServletResponseWrapper {
private MyPrintWriter tmpWriter;
private MyPrintWriter tmpWriter;
private ByteArrayOutputStream output;
public WrapperResponse(HttpServletResponse httpServletResponse) {
super(httpServletResponse);
output = new ByteArrayOutputStream();
tmpWriter = new MyPrintWriter(output);
}
super(httpServletResponse);
output = new ByteArrayOutputStream();
tmpWriter = new MyPrintWriter(output);
}
public void finalize() throws Throwable {
super.finalize();
output.close();
tmpWriter.close();
}
super.finalize();
output.close();
tmpWriter.close();
}
public String getContent() {
try {
tmpWriter.flush(); //刷新该流的缓冲,详看java.io.Writer.flush()
String s = tmpWriter.getByteArrayOutputStream().toString("UTF-8");
//此处可根据需要进行对输出流以及Writer的重置操作
//比如tmpWriter.getByteArrayOutputStream().reset()
return s;
} catch (UnsupportedEncodingException e) {
return "UnsupportedEncoding";
}
}
//覆盖getWriter()方法,使用我们自己定义的Writer
try {
tmpWriter.flush(); //刷新该流的缓冲,详看java.io.Writer.flush()
String s = tmpWriter.getByteArrayOutputStream().toString("UTF-8");
//此处可根据需要进行对输出流以及Writer的重置操作
//比如tmpWriter.getByteArrayOutputStream().reset()
return s;
} catch (UnsupportedEncodingException e) {
return "UnsupportedEncoding";
}
}
//覆盖getWriter()方法,使用我们自己定义的Writer
public PrintWriter getWriter() throws IOException {
return tmpWriter;
}
return tmpWriter;
}
public void close() throws IOException {
tmpWriter.close();
}
//自定义PrintWriter,为的是把response流写到自己指定的输入流当中
//而非默认的ServletOutputStream
tmpWriter.close();
}
//自定义PrintWriter,为的是把response流写到自己指定的输入流当中
//而非默认的ServletOutputStream
private static class MyPrintWriter extends PrintWriter {
ByteArrayOutputStream myOutput; //此即为存放response输入流的对象
ByteArrayOutputStream myOutput; //此即为存放response输入流的对象
public MyPrintWriter(ByteArrayOutputStream output) {
super(output);
myOutput = output;
}
super(output);
myOutput = output;
}
public ByteArrayOutputStream getByteArrayOutputStream() {
return myOutput;
}
return myOutput;
}
}
}
}
引用:http://hi.baidu.com/bobylou/blog/item/6045562cedb00aed8b13996c.html
- 如何(怎么)获取jsp输出内容?用HttpServletResponseWrapper吧
- 用HttpServletResponseWrapper获取jsp的输出内容
- SpringMVC——使用RequestDispatcher.include()和HttpServletResponseWrapper动态获取jsp输出内容
- 用HttpServletResponseWrappper 获取jsp 输出内容
- 获取jsp输出内容来进行简繁转换
- 在不知内容的情况下获取Excel表的内容并输出到JSP页面
- jsp获取ckeditor内容
- Filter中使用 HttpServletResponseWrapper修改response内容
- WinExec 运行一个命令行程序,怎么获取其输出的内容?
- 通过HttpServletResponseWrapper获取到返回body
- 怎么获取PowerPoint备注内容
- 通道获取控制台输出内容
- 获取页面内容,然后输出
- C#获取命令行输出内容
- 如何创建Html下拉框和js及jsp如何获取下拉框里的内容
- Thymeleaf怎么原样输出html内容
- 如何获取单元格内容
- 如何获取短信内容
- Jpeg 文件结构
- jsp网站的静态页面生成方案
- group by 的 sum 求和
- JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
- 六十星系之29武曲独坐辰戌
- 如何(怎么)获取jsp输出内容?用HttpServletResponseWrapper吧
- Dreamweaver运行时发生JavaScript错误怎么办
- 职业的秘密(24)开放你的心智
- CString和wstring互转
- >/dev/null 2>&1
- 使用SQL Server需要注意的12点
- 创业者和VC(来源:创业的不能承受之轻)
- Linux下vi简明手册
- “项目 "E:/..../***.wdproj "所需的应用程序未安装。确保已安装项目类型(.wdproj)的应用程序”