簡體   English   中英

如何將響應從servlet轉換為字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM