很抱歉用这个来破坏你的一天,但我花了很长时间在网上搜索答案,我完全被卡住了!
在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发送响应,或输出数据到屏幕。
如果有人能帮助我,我将非常感激。
答案 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 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");