如何将响应从servlet转换为String?

时间:2013-02-01 17:32:31

标签: java servlets response printwriter requestdispatcher

很抱歉用这个来破坏你的一天,但我花了很长时间在网上搜索答案,我完全被卡住了!

在Web应用程序中,我使用RequestDispatcher将请求从servlet_A发送到servlet_B。 在servlet_B中,我运行了一些生成一个简单String值的代码,该值作为对servlet_A的响应返回。

servlet中的代码A:

ServletContext context = getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/servlet_B");
dispatcher.forward(request, response);

/*
How do I catch the response from servlet_B and convert it to a String?
*/

servlet B中的代码:

/*
Some other code which creates a String
*/

String result = "someValue";

// Send the response to servlet_A.
response.setContentType("text/plain");
response.setContentLength(result.length());
PrintWriter out = response.getWriter();
out.println(result);

在servlet_A中,我需要将servlet_B的响应转换为一个简单的String值,这就是我所困扰的一点。如何将来自servlet_B的响应作为servlet_A中的简单字符串处理?

我认为我需要使用PrintWriter来解析响应,我在网上搜索了一个例子,但我能找到的只是示例,说明如何使用PrintWriter发送响应,或输出数据到屏幕。

如果有人能帮助我,我将非常感激。

3 个答案:

答案 0 :(得分:1)

从技术上讲,你正朝着挽救问题的方向走错路。你要转发的另一个servlet显然是紧耦合的,它的代码需要重构成一个独立的类,它立即以String的形式返回所需的数据,这样另一个servlet就可以将它写入响应并且当前的servlet可以直接使用独立类,而不是首先调用整个其他servlet。

忽略恶臭设计,您可以通过用HttpServletResponseWrapper实现替换当前响应来解决它,该实现写入内部字符串缓冲区而不是实际响应体。这是一个适合您特定功能需求的具体启动示例(请注意,实际实现可能要比这复杂得多,您还需要考虑getOutputStream()getCharacterEncoding()

final StringWriter buffer = new StringWriter();
request.getRequestDispatcher("/servlet_B").include(request, new HttpServletResponseWrapper(response) {
    private PrintWriter writer = new PrintWriter(buffer);
    @Override
    public PrintWriter getWriter() throws IOException {
        return writer;
    }
});

String writtenByServletB = buffer.toString();
// ...

答案 1 :(得分:0)

在servlet B中的

我认为你可以再次使用调度程序来回到servlet A

ServletContext context = getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher(“/servlet_A”);
request.setAttribute("result",result);//the String you want to pass
dispatcher.forward(request, response);

答案 2 :(得分:0)

我想你需要的是将前一个servlet中的一个String带到下一个servlet, 那么您所要做的就是在请求对象中添加一个属性。 因此,当您将请求传递给下一个servlet时,请求对象将值设置为属性

所以在第一个Servlet中你可以写

String sendThisValue = "some Important value to be sent";
request.setAttribute("sendThisValue",sendThisValue);
RequestDispatcher dispatcher = context.getRequestDispatcher(“/servlet_B”);
dispatcher.forward(request, response);

然后当控件传递给下一个servlet 您可以通过

访问使用请求对象在先前servlet中设置的值
String gotTheValue = request.getAttribute("sendThisValue");