Servlets - Yêu cầu HTTP của máy khách

Khi một trình duyệt yêu cầu một trang web, nó sẽ gửi nhiều thông tin đến máy chủ web mà không thể đọc trực tiếp được vì thông tin này truyền đi như một phần của tiêu đề của yêu cầu HTTP. Bạn có thể kiểm tra Giao thức HTTP để biết thêm thông tin về điều này.

Sau đây là thông tin tiêu đề quan trọng đến từ phía trình duyệt và bạn sẽ sử dụng rất thường xuyên trong lập trình web -

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

Accept

Tiêu đề này chỉ định các kiểu MIME mà trình duyệt hoặc các ứng dụng khách khác có thể xử lý. Giá trị củaimage/png hoặc là image/jpeg là hai khả năng phổ biến nhất.

2

Accept-Charset

Tiêu đề này chỉ định bộ ký tự mà trình duyệt có thể sử dụng để hiển thị thông tin. Ví dụ ISO-8859-1.

3

Accept-Encoding

Tiêu đề này chỉ định các loại mã hóa mà trình duyệt biết cách xử lý. Giá trị củagzip hoặc là compress là hai khả năng phổ biến nhất.

4

Accept-Language

Tiêu đề này chỉ định các ngôn ngữ ưa thích của khách hàng trong trường hợp servlet có thể tạo ra kết quả bằng nhiều ngôn ngữ. Ví dụ: en, en-us, ru, v.v.

5

Authorization

Tiêu đề này được khách hàng sử dụng để nhận dạng chính họ khi truy cập các trang Web được bảo vệ bằng mật khẩu.

6

Connection

Tiêu đề này cho biết liệu máy khách có thể xử lý các kết nối HTTP liên tục hay không. Các kết nối liên tục cho phép ứng dụng khách hoặc trình duyệt khác truy xuất nhiều tệp với một yêu cầu duy nhất. Một giá trị củaKeep-Alive nghĩa là các kết nối liên tục nên được sử dụng.

7

Content-Length

Tiêu đề này chỉ áp dụng cho các yêu cầu POST và cung cấp kích thước của dữ liệu POST tính bằng byte.

số 8

Cookie

Tiêu đề này trả lại cookie cho các máy chủ mà trước đó đã gửi chúng đến trình duyệt.

9

Host

Tiêu đề này chỉ định máy chủ và cổng như được cung cấp trong URL ban đầu.

10

If-Modified-Since

Tiêu đề này chỉ ra rằng khách hàng chỉ muốn trang nếu nó đã được thay đổi sau ngày được chỉ định. Máy chủ gửi một mã, 304 có nghĩa làNot Modified tiêu đề nếu không có kết quả mới hơn.

11

If-Unmodified-Since

Tiêu đề này là đảo ngược của If-Modified-Since; nó chỉ định rằng thao tác sẽ chỉ thành công nếu tài liệu cũ hơn ngày được chỉ định.

12

Referer

Tiêu đề này cho biết URL của trang Web giới thiệu. Ví dụ: nếu bạn đang ở trang Web 1 và nhấp vào liên kết đến trang Web 2, URL của trang web 1 sẽ được đưa vào tiêu đề Liên kết giới thiệu khi trình duyệt yêu cầu trang Web 2.

13

User-Agent

Tiêu đề này xác định trình duyệt hoặc ứng dụng khách khác đưa ra yêu cầu và có thể được sử dụng để trả về nội dung khác nhau cho các loại trình duyệt khác nhau.

Phương thức đọc HTTP Header

Có các phương pháp sau có thể được sử dụng để đọc tiêu đề 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 HttpServletRequest

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

Cookie[] getCookies()

Trả về một mảng chứa tất cả các đối tượng Cookie mà khách hàng đã gửi cùng với yêu cầu này.

2

Enumeration getAttributeNames()

Trả về một Bảng kê chứa tên của các thuộc tính có sẵn cho yêu cầu này.

3

Enumeration getHeaderNames()

Trả về một bảng liệt kê tất cả các tên tiêu đề mà yêu cầu này chứa.

4

Enumeration getParameterNames()

Trả về một Danh sách các đối tượng Chuỗi chứa tên của các tham số có trong yêu cầu này

5

HttpSession getSession()

Trả về phiên hiện tại được liên kết với yêu cầu này hoặc nếu yêu cầu không có phiên, hãy tạo một phiên.

6

HttpSession getSession(boolean create)

Trả về HttpSession hiện tại được liên kết với yêu cầu này hoặc, nếu không có phiên hiện tại và giá trị của lần tạo là true, trả về một phiên mới.

7

Locale getLocale()

Trả về Ngôn ngữ ưa thích mà khách hàng sẽ chấp nhận nội dung, dựa trên tiêu đề Ngôn ngữ chấp nhận.

số 8

Object getAttribute(String name)

Trả về giá trị của thuộc tính được đặt tên dưới dạng Đối tượng hoặc null nếu không có thuộc tính nào của tên đã cho tồn tại.

9

ServletInputStream getInputStream()

Truy xuất phần thân của yêu cầu dưới dạng dữ liệu nhị phân bằng ServletInputStream.

10

String getAuthType()

Trả về tên của lược đồ xác thực được sử dụng để bảo vệ servlet, ví dụ: "BASIC" hoặc "SSL" hoặc null nếu JSP không được bảo vệ.

11

String getCharacterEncoding()

Trả về tên của mã hóa ký tự được sử dụng trong phần nội dung của yêu cầu này.

12

String getContentType()

Trả về kiểu MIME của nội dung yêu cầu hoặc null nếu kiểu không được biết.

13

String getContextPath()

Trả về một phần của URI yêu cầu cho biết ngữ cảnh của yêu cầu.

14

String getHeader(String name)

Trả về giá trị của tiêu đề yêu cầu được chỉ định dưới dạng một Chuỗi.

15

String getMethod()

Trả về tên của phương thức HTTP mà yêu cầu này được thực hiện, ví dụ: GET, POST hoặc PUT.

16

String getParameter(String name)

Trả về giá trị của tham số yêu cầu dưới dạng Chuỗi hoặc null nếu tham số không tồn tại.

17

String getPathInfo()

Trả về bất kỳ thông tin đường dẫn bổ sung nào được liên kết với URL mà khách hàng đã gửi khi thực hiện yêu cầu này

18

String getProtocol()

Trả về tên và phiên bản của giao thức mà yêu cầu.

19

String getQueryString()

Trả về chuỗi truy vấn có trong URL yêu cầu sau đường dẫn.

20

String getRemoteAddr()

Trả về địa chỉ Giao thức Internet (IP) của ứng dụng khách đã gửi yêu cầu.

21

String getRemoteHost()

Trả về tên đủ điều kiện của khách hàng đã gửi yêu cầu.

22

String getRemoteUser()

Trả về thông tin đăng nhập của người dùng thực hiện yêu cầu này, nếu người dùng đã được xác thực hoặc vô hiệu nếu người dùng chưa được xác thực.

23

String getRequestURI()

Trả về một phần URL của yêu cầu này từ tên giao thức cho đến chuỗi truy vấn trong dòng đầu tiên của yêu cầu HTTP.

24

String getRequestedSessionId()

Trả về ID phiên do máy khách chỉ định.

25

String getServletPath()

Trả về phần URL của yêu cầu này gọi JSP.

26

String[] getParameterValues(String name)

Trả về một mảng các đối tượng Chuỗi chứa tất cả các giá trị mà tham số yêu cầu đã cho có hoặc null nếu tham số không tồn tại.

27

boolean isSecure()

Trả về Boolean cho biết liệu yêu cầu này có được thực hiện bằng kênh bảo mật, chẳng hạn như HTTPS hay không.

28

int getContentLength()

Trả về độ dài, tính bằng byte, của phần thân yêu cầu và được cung cấp bởi luồng đầu vào hoặc -1 nếu độ dài không được biết.

29

int getIntHeader(String name)

Trả về giá trị của tiêu đề yêu cầu được chỉ định dưới dạng int.

30

int getServerPort()

Trả về số cổng mà yêu cầu này đã được nhận.

Ví dụ về yêu cầu tiêu đề HTTP

Sau đây là ví dụ sử dụng getHeaderNames()phương thức HttpServletRequest để đọc thông tin tiêu đề HTTP. Phương thức này trả về một Bảng kê chứa thông tin tiêu đề được liên kết với yêu cầu HTTP hiện tại.

Khi chúng ta có Enumeration, chúng ta có thể lặp lại Enumeration theo cách tiêu chuẩn, sử dụng phương thức hasMoreElements () để xác định thời điểm dừng và sử dụng phương thức nextElement () để lấy từng tên tham số

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      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" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );
 
      Enumeration headerNames = request.getHeaderNames();
    
      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
   }
   
   // 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ẽ tạo ra kết quả sau:

HTTP Header Request Example

Header Name Header Value(s)
accept */*
accept-language en-us
user-agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding gzip, deflate
host localhost:8080
connection Keep-Alive
cache-control no-cache