如何获取jsp输出内容用HttpServletResponseWrapper

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取jsp输出内容用HttpServletResponseWrapper相关的知识,希望对你有一定的参考价值。

参考技术A 总的思路是,利用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();

此处一个自定义类WrapperResponse封装了HttpServletResponse,具体请看一下代码。
代码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 javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class WrapperResponse extends HttpServletResponseWrapper
private MyPrintWriter tmpWriter;
private ByteArrayOutputStream output;
public WrapperResponse(HttpServletResponse httpServletResponse)
super(httpServletResponse);
output = new ByteArrayOutputStream();
tmpWriter = new MyPrintWriter(output);

public void finalize() throws Throwable
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
public PrintWriter getWriter() throws IOException
return tmpWriter;

public void close() throws IOException
tmpWriter.close();

//自定义PrintWriter,为的是把response流写到自己指定的输入流当中
//而非默认的ServletOutputStream
private static class MyPrintWriter extends PrintWriter
ByteArrayOutputStream myOutput; //此即为存放response输入流的对象
public MyPrintWriter(ByteArrayOutputStream output)
super(output);
myOutput = output;

public ByteArrayOutputStream getByteArrayOutputStream()
return myOutput;


本回答被提问者采纳

jsp页面函数中如何获取sevlet传过来的List

然后要从List中取出数据库表的内容
你好~~ 能讲具体一点么 ,我想在for循环里面对某些字段进行判断 另外没有用struts

request.getAttribute(变量名)

不过你先要在servlet中把变量保存在一个变量名中
用request.setAttribute(变量名,要保存的变量);
在servlet中用request跳转到页面中.例如:a.jsp

在a.jsp中用request.getAttribute(变量名)获取list

取出list中的内容用for循环
然后用<%= %>显示
参考技术A 如果单纯的使用小脚本,就在<% %>中使用for循环遍历,并配合<%= %>输出,输出时可以配合HTML代码控制格式,如果使用Struts标签,直接<logic:foreach>循环就可以了 参考技术B List list = (List) session.getAttribute("dispList");//取得list
ResultWork1 resultWork1 = null; //ResultWork1 类
if (list == null)
System.out.println("没有数据");
else
for (int i = 0; i < list.size(); i++)
resultWork1 = (ResultWork1) list.get(i);//取得一个类
id = resultWork1.getId().toString();//取得id
System.out.println("有数据");

参考技术C List list = (List) session.getAttribute("dispList");//取得list
ResultWork1 resultWork1 = null; //ResultWork1 类
if (list == null)
System.out.println("没有数据");
else
for (int i = 0; i < list.size(); i++)
resultWork1 = (ResultWork1) list.get(i);//取得一个类
id = resultWork1.getId().toString();//取得id
System.out.println("有数据");

以上是关于如何获取jsp输出内容用HttpServletResponseWrapper的主要内容,如果未能解决你的问题,请参考以下文章

如何将BufferedImage输出到jsp页面

jsp自定义标签获取标签体内容输出到页面展示《三》

在jsp中如何实现加一个动态下拉框选择年份,并在当前页面显示相应的月份值?

如何访问 JSP 中 servlet 设置的请求属性?

jsp如何将数据库中的内容显示到下拉列表中

jsp页面如何获js中if语句的变量值