Servlets - Phản hồi HTTP của máy chủ

Như đã thảo luận trong chương trước, khi máy chủ Web phản hồi một yêu cầu HTTP, phản hồi thường bao gồm một dòng trạng thái, một số tiêu đề phản hồi, một dòng trống và tài liệu. Một phản hồi điển hình trông như thế này -

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>

Dòng trạng thái bao gồm phiên bản HTTP (trong ví dụ là HTTP / 1.1), mã trạng thái (200 trong ví dụ) và một thông báo rất ngắn tương ứng với mã trạng thái (trong ví dụ là OK).

Sau đây là tóm tắt về các tiêu đề phản hồi HTTP 1.1 hữu ích nhất quay trở lại trình duyệt từ phía máy chủ web và bạn sẽ sử dụng chúng rất thường xuyên trong lập trình web -

Sr.No. Tiêu đề & Mô tả
1

Allow

Tiêu đề này chỉ định các phương thức yêu cầu (GET, POST, v.v.) mà máy chủ hỗ trợ.

2

Cache-Control

Tiêu đề này chỉ định các trường hợp mà tài liệu phản hồi có thể được lưu vào bộ nhớ cache một cách an toàn. Nó có thể có các giá trịpublic, private hoặc là no-cache v.v ... Tài liệu công khai có nghĩa là có thể lưu vào bộ nhớ cache, Riêng tư có nghĩa là tài liệu dành cho một người dùng duy nhất và chỉ có thể được lưu trữ trong bộ nhớ đệm riêng tư (không chia sẻ) và nocache nghĩa là tài liệu không bao giờ được lưu vào bộ nhớ đệm.

3

Connection

Tiêu đề này hướng dẫn trình duyệt có sử dụng liên tục trong các kết nối HTTP hay không. Một giá trị củaclose hướng dẫn trình duyệt không sử dụng các kết nối HTTP liên tục và keepalive nghĩa là sử dụng các kết nối liên tục.

4

Content-Disposition

Tiêu đề này cho phép bạn yêu cầu trình duyệt yêu cầu người dùng lưu phản hồi vào đĩa trong một tệp có tên đã cho.

5

Content-Encoding

Tiêu đề này chỉ định cách mã hóa trang trong quá trình truyền.

6

Content-Language

Tiêu đề này biểu thị ngôn ngữ mà tài liệu được viết. Ví dụ: en, en-us, ru, v.v.

7

Content-Length

Tiêu đề này cho biết số byte trong phản hồi. Thông tin này chỉ cần thiết nếu trình duyệt đang sử dụng kết nối HTTP liên tục (vẫn tồn tại).

số 8

Content-Type

Tiêu đề này cung cấp loại MIME (Phần mở rộng Thư Internet Đa năng) của tài liệu phản hồi.

9

Expires

Tiêu đề này chỉ định thời gian mà tại đó nội dung được coi là lỗi thời và do đó không còn được lưu vào bộ nhớ đệm.

10

Last-Modified

Tiêu đề này cho biết thời điểm tài liệu được thay đổi lần cuối. Sau đó, khách hàng có thể lưu vào bộ nhớ cache của tài liệu và cung cấp một ngày bằngIf-Modified-Since tiêu đề yêu cầu trong các yêu cầu sau này.

11

Location

Tiêu đề này nên được bao gồm với tất cả các phản hồi có mã trạng thái trong 300s. Điều này thông báo cho trình duyệt về địa chỉ tài liệu. Trình duyệt tự động kết nối lại với vị trí này và truy xuất tài liệu mới.

12

Refresh

Tiêu đề này chỉ định thời gian trình duyệt sẽ yêu cầu một trang được cập nhật. Bạn có thể chỉ định thời gian tính bằng số giây mà sau đó một trang sẽ được làm mới.

13

Retry-After

Tiêu đề này có thể được sử dụng cùng với phản hồi 503 (Dịch vụ không khả dụng) để cho khách hàng biết nó có thể lặp lại yêu cầu của mình trong bao lâu.

14

Set-Cookie

Tiêu đề này chỉ định một cookie được liên kết với trang.

Phương pháp đặt tiêu đề phản hồi HTTP

Có các phương pháp sau có thể được sử dụng để đặt tiêu đề phản hồi HTTP trong chương trình servlet của bạn. Các phương thức này có sẵn với đối tượng HttpServletResponse .

Sr.No. Phương pháp & Mô tả
1

String encodeRedirectURL(String url)

Mã hóa URL được chỉ định để sử dụng trong phương thức sendRedirect hoặc nếu không cần mã hóa, trả về URL không thay đổi.

2

String encodeURL(String url)

Mã hóa URL được chỉ định bằng cách bao gồm ID phiên trong đó hoặc, nếu không cần mã hóa, trả về URL không thay đổi.

3

boolean containsHeader(String name)

Trả về Boolean cho biết liệu tiêu đề phản hồi được đặt tên đã được đặt chưa.

4

boolean isCommitted()

Trả về Boolean cho biết phản hồi đã được cam kết chưa.

5

void addCookie(Cookie cookie)

Thêm cookie được chỉ định vào phản hồi.

6

void addDateHeader(String name, long date)

Thêm tiêu đề phản hồi với tên và giá trị ngày đã cho.

7

void addHeader(String name, String value)

Thêm tiêu đề phản hồi với tên và giá trị đã cho.

số 8

void addIntHeader(String name, int value)

Thêm tiêu đề phản hồi với tên và giá trị số nguyên đã cho.

9

void flushBuffer()

Buộc ghi bất kỳ nội dung nào trong bộ đệm cho máy khách.

10

void reset()

Xóa mọi dữ liệu tồn tại trong bộ đệm cũng như mã trạng thái và tiêu đề.

11

void resetBuffer()

Xóa nội dung của bộ đệm bên dưới trong phản hồi mà không xóa tiêu đề hoặc mã trạng thái.

12

void sendError(int sc)

Gửi phản hồi lỗi cho máy khách bằng mã trạng thái được chỉ định và xóa bộ đệm.

13

void sendError(int sc, String msg)

Gửi phản hồi lỗi cho máy khách bằng trạng thái được chỉ định.

14

void sendRedirect(String location)

Gửi phản hồi chuyển hướng tạm thời cho khách hàng bằng cách sử dụng URL vị trí chuyển hướng được chỉ định.

15

void setBufferSize(int size)

Đặt kích thước bộ đệm ưu tiên cho nội dung phản hồi.

16

void setCharacterEncoding(String charset)

Ví dụ: đặt mã hóa ký tự (bộ mã MIME) của phản hồi được gửi đến máy khách thành UTF-8.

17

void setContentLength(int len)

Đặt độ dài của nội dung trong phản hồi Trong các servlet HTTP, phương pháp này đặt tiêu đề Độ dài Nội dung HTTP.

18

void setContentType(String type)

Đặt loại nội dung của phản hồi được gửi đến máy khách, nếu phản hồi chưa được cam kết.

19

void setDateHeader(String name, long date)

Đặt tiêu đề phản hồi với tên và giá trị ngày đã cho.

20

void setHeader(String name, String value)

Đặt tiêu đề phản hồi với tên và giá trị đã cho.

21

void setIntHeader(String name, int value)

Đặt tiêu đề phản hồi với tên và giá trị số nguyên đã cho

22

void setLocale(Locale loc)

Đặt ngôn ngữ của phản hồi, nếu phản hồi chưa được cam kết.

23

void setStatus(int sc)

Đặt mã trạng thái cho phản hồi này

Ví dụ về phản hồi tiêu đề HTTP

Bạn đã thấy phương thức setContentType () hoạt động trong các ví dụ trước và ví dụ sau cũng sẽ sử dụng cùng một phương thức, ngoài ra chúng tôi sẽ sử dụng setIntHeader() phương pháp để thiết lập Refresh đầu trang.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
         
      if(calendar.get(Calendar.AM_PM) == 0)
         am_pm = "AM";
      else
         am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Refresh Header Setting";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<p>Current Time is: " + CT + "</p>\n"
      );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Bây giờ việc gọi servlet ở trên sẽ hiển thị thời gian hệ thống hiện tại sau mỗi 5 giây như sau. Chỉ cần chạy servlet và chờ xem kết quả -

Auto Refresh Header Setting

Current Time is: 9:44:50 PM