CodeGym/Khóa học Java/Mô-đun 3/Định hình phản hồi của Servlet

Định hình phản hồi của Servlet

Có sẵn

3.1 Lớp HttpServletResponse

Sau khi gọi service()phương thức servlet của bạn, bộ chứa web sẽ tạo phản hồi cho ứng dụng khách dựa trên tệp HttpServletResponse. Vì vậy, nếu bạn muốn bằng cách nào đó tác động đến phản hồi của khách hàng, thì bạn nên sửa đổi đối tượng này.

Phản hồi của máy chủ bao gồm ba phần:

  • Dòng trạng thái (ví dụ: 200 OK)
  • tiêu đề
  • nội dung phản hồi

Và các class method HttpServletResponsecũng được chia thành 3 nhóm? Hầu hết:

phương pháp Sự miêu tả
1 void setStatus(int sc) Đặt mã trạng thái phản hồi.
2 void sendError(int sc) Gửi lỗi cho khách hàng với mã được chỉ định.
3 void sendError(int sc, String msg) Gửi lỗi với mã được chỉ định và thông báo cho khách hàng.
4 void addHeader(String name, String value) Thêm tiêu đề vào danh sách tiêu đề phản hồi.
5 void setHeader(String name, String value) Thay đổi tiêu đề trong danh sách tiêu đề phản hồi.
6 boolean containsHeader(String name) Kiểm tra nếu tiêu đề đã tồn tại.
7 void addCookie(Cookie cookie) Thêm Cookie vào phản hồi.
số 8 void sendRedirect(String location) Chuyển hướng máy khách đến một URL khác.
9 String encodeRedirectURL(String url) Mã hóa URL được chỉ định để sử dụng trong phương thức sendRedirect.
10 String encodeURL(String url) Mã hóa URL được chỉ định, bao gồm ID phiên.
mười một void setContentType(String type) Đặt MimeType của kết quả.
12 void setContentLength(int len) Đặt độ dài của nội dung phản hồi.
13 void setCharacterEncoding(String charset) Đặt bộ mã hóa phản hồi.
14 void setBufferSize(int size) Đặt kích thước bộ đệm cho nội dung phản hồi.
15 boolean isCommitted() Kiểm tra xem bộ đệm đã được ghi vào phản hồi chưa.
16 void flushBuffer() Ghi nội dung của bộ đệm vào phản hồi.
17 void reset() Đặt lại tất cả dữ liệu được lưu trữ trong bộ đệm, tiêu đề và mã phản hồi.
18 void resetBuffer() Xóa bộ đệm phản hồi.

Các phương pháp ở đây khá tầm thường. Nhưng tôi sẽ cung cấp cho bạn một vài điểm nổi bật dưới đây.

Bộ đệm . Phản hồi của servlet của bạn được ghi vào bộ đệm, không được gửi ngay cho người dùng. Do đó, ở một số giai đoạn (ví dụ: nếu xảy ra lỗi), bạn có thể đặt lại (xóa) mọi thứ được ghi vào bộ đệm. Bạn thậm chí có thể gọi phương thức reset() và xóa không chỉ nội dung của bộ đệm mà còn cả các tiêu đề có mã phản hồi.

chuyển hướng 3.2()

Điểm quan trọng thứ hai là chuyển hướng. Nếu servlet của bạn quyết định chuyển hướng máy khách tới một URL khác, thì bạn cần gửi URL này tới máy khách bằng cách nào đó. Điều này có thể được thực hiện bằng cách sử dụng sendRedirect.

Nhưng có một sắc thái quan trọng. URI có thể chứa nhiều ký tự hơn mức cho phép trong nội dung phản hồi. Do đó, trước tiên URL phải được mã hóa thành một bộ ký tự hợp lệ trước khi gọi phương thức sendRedirect(). Có một phương pháp đặc biệt cho việc này encodeRedirectURL(String url). Sử dụng nó.

Chuyển hướng ví dụ:

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 Phương thức getWriter()

Và bây giờ chúng ta sẽ học cách viết văn bản dưới dạng phần thân phản hồi. Để làm điều này, lớp HttpServletResponsecó một phương thức đặc biệt getWriter()trả về một đối tượng PrintStream. Nếu có ai quên thì đây là loại trường có tên System.out.

Để viết một số văn bản dưới dạng phản hồi của servlet, bạn cần:

  • Lấy đối tượng PrintStream bằng cách gọi phương thức response.getWriter().
  • Viết bất cứ thứ gì bạn cho là cần thiết vào đối tượng PrintStream (tất cả dữ liệu sẽ được ghi vào bộ đệm).
  • Gửi bộ đệm cho người dùng bằng cách gọi phương thức close()trên PrintStream.

Hãy viết một servlet cộng hai số abtrả về kết quả cho người dùng:

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();
        }
    }
}
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào