Client Request trong Servlet



Khi một trình duyệt yêu cầu một trang web, nó gửi nhiều thông tin tới Web Server, mà không thể được đọc một cách trực tiếp bởi vì thông tin này chuyển động như là một phần của Header trong HTTP Request. Bạn có thể kiểm tra Giao thức HTTP để tìm thêm thông tin về điều này.

Bảng dưới liệt kê các thông tin Header quan trọng mà tới từ trình duyệt và bạn sẽ sử dụng rất thường xuyên trong lập trình Web.

HeaderMiêu tả
AcceptTrường này xác định loại MIME mà trình duyệt hoặc Client khác có thể xử lý. Các giá trị image/png hoặc image/jpeg là hai khả năng phổ biến nhất
Accept-CharsetTrường này xác đị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
Accept-EncodingTrường này xác định kiểu mã hóa mà trình duyệt biết để xử lý. Các giá trị của gzip hoặc compress là hai khả năng phổ biến nhất
Accept-LanguageTrường này xác định ngôn ngữ ưa thíc của Client trong trường hợp Servlet có thể tạo các kết quả trong nhiều ngôn ngữ. Ví dụ en, en-us, ru, .v.v.
AuthorizationTrường này được sử dụng bởi Client để nhận diện chính nó khi truy cập vào các trang web được bảo vệ bởi password
ConnectionTrường này chỉ dẫn có hay không Client có thể xử lý các kết nối HTTP dạng Persistent. Các kết nối Persistent cho phép Client hoặc trình duyệt thu nhận nhiều file với một yêu cầu đơn. Một giá trị của Keep-Alive nghĩa là các kết nối Persistent này nên được sử dụng
Content-LengthTrường này chỉ thích hợp với các yêu cầu POST và cung cấp kích cỡ của dữ liệu POST bằng giá trị byte
CookieTrường này trả về các cookie tới các Server mà trước đó đã gửi chúng tới trình duyệt
HostTrường này xác định host và cổng (port) khi được cung cấp trong URL ban đầu
If-Modified-SinceTrường này chỉ rằng Client muốn trang này chỉ khi nó đã được thay đổi sau ngày đã xác định. Server gửi một code là 304, nghĩa là Not Modified Header nếu không có kết quả nào mới hơn là có sẵn
If-Unmodified-SinceTrường này là ngược với trường If-Modified-Since. Nó xác định hoạt động là thành công chỉ khi tài liệu là cũ hơn ngày đã xác định
RefererTrường này chỉ URL của trang web đang tham chiếu đó. Ví dụ, nếu bạn tại trang Webpage 1 và click vào một link tới trang Webpage 2, thì URL của Webpage 1 được bao trong trường Referer Header khi trình duyệt yêu cầu trang Webpage 2
User-AgentTrường này nhận diện trình duyệt hoặc Client đang tạo 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
Quảng cáo

Các phương thức để đọc HTTP Header

Bảng dưới liệt kê các phương thức có thể được sử dụng để đọc HTTP Header 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.

STTPhương thức & Miêu tả
1

Cookie[] getCookies()

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

2

Enumeration getAttributeNames()

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

3

Enumeration getHeaderNames()

Trả về một Enumeration của tất cả tên Header mà yêu cầu này chứa

4

Enumeration getParameterNames()

Trả về một Enumeration của các đối tượng String chứa tên của Parameter được chứa trong yêu cầu này

5

HttpSession getSession()

Trả về session hiện tại, mà liên kết với yêu cầu này, hoặc yêu cầu đó không có một session, nó sẽ tạo ra một session

6

HttpSession getSession(boolean create)

Trả về HttpSession hiện tại, mà liên kết với yêu cầu này, hoặc nếu không có session hiện tại nào và create là true, nó trả về một session mới

7

Locale getLocale()

Trả về Locale mà Client sẽ chấp chận nội dung trong đó, dựa trên trường Accept-Language Header

8

Object getAttribute(String name)

Trả về giá trị của thuộc tính name như là một Object, hoặc trả về null nếu không có thuộc tính nào trong name đã cung cấp tồn tại

9

ServletInputStream getInputStream()

Thu nhận thân yêu cầu dạng dữ liệu nhị phân bởi sử dụng một ServletInputStream

10

String getAuthType()

Trả về tên của Authentication Scheme được sử dụng để bảo vệ Servlet, ví dụ: "BASIC" hoặc "SSL", hoặc trả về 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 thân yêu cầu này

12

String getContentType()

Trả về kiểu MIME của thân yêu cầu, hoặc trả về null nếu không biết kiểu này

13

String getContextPath()

Trả về phần URI yêu cầu mà chỉ dẫn context của yêu cầu đó

14

String getHeader(String name)

Trả về giá trị của trường Header đã xác định dưới dạng một String

15

String getMethod()

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

16

String getParameter(String name)

Trả về giá trị của Parameter dưới dạng một String, hoặc trả về null nếu Parameter này không tồn tại

17

String getPathInfo()

Trả về bất kỳ thông tin path bổ sung, mà liên kết với URI mà Client đã gửi khi nó tạo yêu cầu này

18

String getProtocol()

Trả về tên và phiên bản của giao thức

19

String getQueryString()

Trả về chuỗi truy vấn, được chứa trong URL sau path đó

20

String getRemoteAddr()

Trả về địa chỉ Internet Protocol (IP) của một Client mà gửi yêu cầu này

21

String getRemoteHost()

Trả về tên đầy đủ của Client mà gửi yêu cầu này

22

String getRemoteUser()

Trả về login của người sử dụng tạo yêu cầu này, nếu người dùng đã được xác nhận, hoặc trả về null nếu người dùng chưa được xác nhận

23

String getRequestURI()

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

24

String getRequestedSessionId()

Trả về ID của session đã được xác định bởi Client

25

String getServletPath()

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

26

String[] getParameterValues(String name)

Trả về một mảng đối tượng String chứa tất cả các giá trị mà các parameter đã cung cấp có, hoặc trả về null nếu parameter này không tồn tại

27

boolean isSecure()

Trả về một Boolean chỉ rằng có hay không yêu cầu này được tạo bởi sử dụng một đường an toàn, như HTTPS

28

int getContentLength()

Trả về độ dài, bằng giá trị byte, của thân yêu cầu và làm nó có sẵn bởi Input Stream, hoặc trả về -1 nếu độ dài là không được biết

29

int getIntHeader(String name)

Trả về giá trị của Request header đã cho dưới dạng một int

30

int getServerPort()

Trả về số hiệu cổng mà trên đó yêu cầu được nhận

Quảng cáo

Ví dụ về HTTP Header Request

Ví dụ sau sử dụng phương thức getHeaderName() của đối tượng HttpServletRequest để đọc thông tin HTTP header. Phương thức này trả về một Enumeration chứa thông tin header mà liên kết với HTTP request hiện tại.

Khi chúng ta có một Enumeration, chúng ta có thể lặp Enumeration này theo phương thức chuẩn: sử dụng phương thức hasMoreElements() để xác định khi nào dừng và sử dụng phương thức nextElement() để nhận tên mỗi parameter.

// 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ờ gọi Servlet trên sẽ cho kết quả sau::

HTTP Header Request Example

Header NameHeader 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

Các bạn ở Hà Nội có thể tham gia khóa học thứ 9 của vietjackteam (đang tuyển sinh) vào cuối tháng 10/2018 do anh Nguyễn Thanh Tuyền, admin vietjack.com trực tiếp giảng dạy tại Hà Nội. Chi tiết nội dung khóa học tham khỏa link : Khóa học Java.Các bạn học CNTT, điện tử viễn thông, đa phương tiện, điện-điện tử, toán tin có thể theo học khóa này. Số lượng các công việc Java hoặc .NET luôn gấp ít nhất 3 lần Android hoặc iOS trên thị trường tuyển dụng. Khóa online= Đi phỏng vấn, Khóa offline= Đi phỏng vấn+ 1.5 tháng thực tập ngoài doanh nghiệp. .

Mọi người có thể xem demo nội dung khóa học tại địa chỉ Video demo khóa học Offline

Các bạn ở xa học không có điều kiện thời gian có thể tham dự khóa Java online để chủ động cho việc học tập. Từ tháng 4/2018, VietJack khuyến mại giá SỐC chỉ còn 250k cho khóa học, các bạn có thể trả lại tiền nếu không hài lòng về chất lượng trong 1 tháng, liên hệ facebook admin fb.com/tuyen.vietjack để thanh toán chuyển khoản hoặc thẻ điện thoại, khóa học bằng Tiếng Việt với gần 100 video, các bạn có thể chủ động bất cứ lúc nào, và xem mãi mãi. Thông tin khóa học tại Khóa học Java Online trên Udemy

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học SEO phổ biến khác tại VietJack: