gpt4 book ai didi

Java:在不修改响应对象的情况下将其他servlet的输出作为字符串获取

转载 作者:行者123 更新时间:2023-11-28 23:33:48 26 4
gpt4 key购买 nike

我想在我当前的 servlet 中包含来自其他 servlet 的数据,并稍作修改。我想将其他 servlet 的输出作为字符串。

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

最佳答案

如 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,它会动态执行响应流的修改。

关于Java:在不修改响应对象的情况下将其他servlet的输出作为字符串获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27081261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com