塑造 Servlet 響應

開放

3.1 HttpServletResponse類

調用service()您的 servlet 方法後,Web 容器將根據HttpServletResponse. 所以如果你想以某種方式影響對客戶端的響應,那麼你應該修改這個對象。

服務器響應由三部分組成:

  • 狀態行(例如:200 OK)
  • 標頭
  • 響應體

而類方法HttpServletResponse也分為3組?幾乎:

方法 描述
1個 void setStatus(int sc) 設置響應狀態代碼。
2個 void sendError(int sc) 使用指定代碼向客戶端發送錯誤。
3個 void sendError(int sc, String msg) 向客戶端發送帶有指定代碼的錯誤和消息。
4個 void addHeader(String name, String value) 將標頭添加到響應標頭列表。
5個 void setHeader(String name, String value) 更改響應標頭列表中的標頭。
6個 boolean containsHeader(String name) 檢查標題是否已經存在。
7 void addCookie(Cookie cookie) 將 Cookie 添加到響應中。
8個 void sendRedirect(String location) 將客戶端重定向到不同的 URL。
9 String encodeRedirectURL(String url) 對指定的 URL 進行編碼以在 sendRedirect 方法中使用。
10 String encodeURL(String url) 對指定的 URL 進行編碼,包括會話 ID。
十一 void setContentType(String type) 設置結果的 MimeType。
12 void setContentLength(int len) 設置響應主體的長度。
13 void setCharacterEncoding(String charset) 設置響應編碼集。
14 void setBufferSize(int size) 設置響應主體的緩衝區大小。
15 boolean isCommitted() 檢查緩衝區是否已寫入響應。
16 void flushBuffer() 將緩衝區的內容寫入響應。
17 void reset() 重置存儲在緩衝區、標頭和響應代碼中的所有數據。
18 void resetBuffer() 清除響應緩衝區。

這裡的方法非常簡單。但我會在下面給你一些重點。

緩衝區。您的 servlet 的響應被寫入緩衝區,而不​​是立即發送給用戶。因此,在某個階段(例如,如果發生錯誤),您可以重置(擦除)寫入緩衝區的所有內容。您甚至可以調用 reset() 方法,不僅可以清除緩衝區的內容,還可以清除帶有響應代碼的標頭。

3.2 重定向()

第二個要點是重定向。如果您的 servlet 決定將客戶端重定向到另一個 URL,那麼您需要以某種方式將此 URL 發送到客戶端。這可以使用sendRedirect.

但是有一個重要的細微差別。URI 可以包含比響應正文中允許的字符範圍更廣的字符。因此,在調用該方法之前,必須先將 URL 編碼為有效的字符集sendRedirect()。為此有一個特殊的方法encodeRedirectURL(String url)。用它。

重定向示例:

public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 getWriter()方法

現在我們將學習如何將文本編寫為響應正文。為此,該類有一個返回對象的HttpServletResponse特殊方法。如果有人忘記了,這是名稱為 的字段類型。getWriter()PrintStreamSystem.out

為了將一些文本寫為 servlet 響應,您需要:

  • 通過調用 獲取 PrintStream 對象response.getWriter()
  • 將您認為必要的任何內容寫入 PrintStream 對象(所有數據都將寫入緩衝區)。
  • close()通過調用PrintStream 上的方法將緩衝區發送給用戶。

讓我們編寫一個 servlet,將兩個數字相加a並將b結果返回給用戶:

public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” and “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");

        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);

            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();

            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言