2

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

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

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

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

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

4

1 回答 1

0

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

我认为在您的代码中某处您正在使用 getServletOutputStream() 并且包括 JSP 的使用 getWriter()。这导致您出现异常。

请参阅重复的问题。

java.lang.IllegalStateException:已经在使用输出流

于 2013-04-22T15:50:57.480 回答