来自自定义标记和IllegalStateExceptions的RequestDispatcher.include()

时间:2013-04-22 14:02:15

标签: java java-ee servlets character-encoding

在自定义标记中,我想通过RequestDispatcher包含其他内容:

RequestDispatcher rd = request.getRequestDispatcher(url);
rd.include(request, response);

但我无法知道响应输出流的状态。我目前正在解决这个问题,将响应和JspWriter包装在另一个实现HttpServletRequest的对象中。当内部调用getWriter()时,这很好用。但是,如果处理请求的代码实际上想要获取原始OutputStream(我无法安全地在标记中获取),我会得到一个IllegalStateException(因为已经调用了getOutputStream())。

现在我还可以创建一个新的OutputStream并将其包装在我的请求包装器中,缓冲它直到include()返回,然后获取写入其中的字节并将它们写入JspWriter。

然而,我的问题是:我应该尝试维护字符编码吗?如:我应该“模拟”更多的响应对象,所以我至少可以尝试从我传递给include和底层输出流的请求包装器中的字符编码集进行转换?这会“足够干净”吗?我应该研究哪些实用课程?

1 个答案:

答案 0 :(得分:0)

您不能在同一响应中同时使用getServletOutputStream()和getWriter()。

我认为您的代码中某处使用了getServletOutputStream()并且包含JSP使用了getWriter()。这导致你的例外。

请查看重复的问题。

java.lang.IllegalStateException: Already using output stream