[英]How do I convert a response from a servlet to a String?
抱歉,用這一天破壞了您的一天,但是我花了很長時間在網上拖網尋找答案,我完全陷於困境!
在一個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發送響應或將數據輸出到屏幕。
如果有人可以幫助我,我將不勝感激。
從技術上講,解決該問題的方向錯誤。 您要轉發到的另一個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();
// ...
在servlet BI中,您可以再次使用分派器返回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);
我想您所需要的只是將一個字符串從上一個servlet攜帶到下一個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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.