Java:将其他servlet的输出作为字符串输出而不修改响应对象

时间:2014-11-22 19:01:17

标签: java tomcat servlets

我想稍微修改一下,将其他servlet中的数据包含在我当前的servlet中。 我希望将其他servlet的输出作为String。

大多数解决方案都提到request.getRequestDispatcher('/path/to/servlet/').include(request, response)。但这也是修改这个servlet的响应。如何在不修改当前servlet输出的情况下获得其他servlet的输出?

1 个答案:

答案 0 :(得分:0)

如A4L所述,您可以使用包装的输出编写器(或流,如果被调用的servlet使用它),将中间结果捕获为具有StringWriter的字符串。它可能看起来像这样:

    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        RequestDispatcher dispatcher =
            request.getRequestDispatcher("/other-servlet");
        StringWriter sw = new StringWriter();
        final PrintWriter pw = new PrintWriter(sw);
        HttpServletResponse responseWrapper =
            new HttpServletResponseWrapper(response) {
                @Override
                public PrintWriter getWriter() throws IOException {
                    return pw;
                }
            };
      dispatcher.include(request, responseWrapper);
    out.println(this + ": The other servlet also wrote: " + sw.toString());
    out.close();
}

但是,在大数据上使用此技术时应该小心,因为在字符串中收集流数据会导致性能下降。如果您需要它来处理大型响应,请考虑编写装饰PrintWriter,它会动态执行响应流的修改。