在自定义标记中,我想通过RequestDispatcher包含其他内容:
RequestDispatcher rd = request.getRequestDispatcher(url);
rd.include(request, response);
但我无法知道响应输出流的状态。我目前正在解决这个问题,将响应和JspWriter包装在另一个实现HttpServletRequest的对象中。当内部调用getWriter()时,这很好用。但是,如果处理请求的代码实际上想要获取原始OutputStream(我无法安全地在标记中获取),我会得到一个IllegalStateException(因为已经调用了getOutputStream())。
现在我还可以创建一个新的OutputStream并将其包装在我的请求包装器中,缓冲它直到include()返回,然后获取写入其中的字节并将它们写入JspWriter。
然而,我的问题是:我应该尝试维护字符编码吗?如:我应该“模拟”更多的响应对象,所以我至少可以尝试从我传递给include和底层输出流的请求包装器中的字符编码集进行转换?这会“足够干净”吗?我应该研究哪些实用课程?
答案 0 :(得分:0)
您不能在同一响应中同时使用getServletOutputStream()和getWriter()。
我认为您的代码中某处使用了getServletOutputStream()并且包含JSP使用了getWriter()。这导致你的例外。
请查看重复的问题。
java.lang.IllegalStateException: Already using output stream