14/08/2018, 10:46

Server Response trong JSP

Khi một Web Server phản hồi một HTTP Request tới trình duyệt, phản hồi đặc trưng bao gồm một dòng Status, một số trường Header, một dòng trống, và tài liệu. Một phản hồi đặc trưng giống như sau: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank ...

Khi một Web Server phản hồi một HTTP Request tới trình duyệt, phản hồi đặc trưng bao gồm một dòng Status, một số trường Header, một dòng trống, và tài liệu. Một phản hồi đặc trưng giống như sau:

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

Dòng Status gồm HTTP version (trong ví dụ là HTTP/1.1), một Status code ( trong ví dụ là 200), và một thông báo rất ngắn tương ứng với Status code (trong ví dụ là OK).

Dưới đây là các trường Header hữu ích nhất trong phản hồi HTTP 1.1 mà trở lại trình duyệt từ Web Server và bạn sẽ thường xuyên sử dụng chúng trong lập trình web:

HeaderMiêu tả
AllowTrường này xác định các phương thức yêu cầu (GET, POST, .v.v.) mà Server hỗ trợ
Cache-ControlTrường này xác định các hoàn cảnh mà trong đó tài liệu phản hồi có thể được cache một cách an toàn. Nó có thể có các giá trị publics, private hoặc no-cache, .v.v.. Trong đó, publics nghĩa là tài liệu có thể được cache, private nghĩa là tài liệu dành cho một người sử dụng và chỉ có thể được lưu giữ riêng (không được chia sẻ) và no-cache nghĩa là tài liệu không bao giờ được cache
ConnectionTrường này chỉ dẫn trình duyệt có sử dụng persistent trong các kết nối HTTP hoặc không. Một giá trị close chỉ rằng trình duyệt không sử dụng các kết nối HTTP dạng persistent và keep-alive nghĩa là sử dụng các kết nối persistent
Content-DispositionTrường này cho bạn yêu cầu rằng trình duyệt hỏi người sử dụng để lưu phản hồi lên địa trong một file với tên đã cho
Content-EncodingTrường này xác định cách mà trang được mã hóa trong khi truyền tải
Content-LanguageTrường này xác định ngôn ngữ mà tài liệu được viết. Ví dụ en, en-us, ru, …
Content-LengthTrường này xác định 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 một kết nối HTTP dạng persistent (giá trị keep-alive)
Content-TypeTrường này kiểu MIME (Multipurpose Internet Mail Extension) của tài liệu phản hồi
ExpiresTrường này xác định thời gian tại đó nội dung nên được xem là hết hạn và không bao giờ được cache nữa
Last-ModifiedTrường này chỉ dẫn khi tài liệu được thay đổi lần cuối. Sau đó Client có thể cache tài liệu này và cung cấp một date bởi một trường yêu cầu If-Modified-Since trong các yêu cầu sau đó
LocationTrường này nên được bao với tất cả phản hồi mà có Status code là 300. Nó 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 tới vị trí này và thu nhận tài liệu mới
RefreshTrường này xác định khi nào trình duyệt nên đề nghị một trang đã được update. Bạn có thể xác định thời gian với đơn vị là số giây sau đó một trang sẽ được refresh
Retry-AfterTrường này có thể được sử dụng khi kết hợp với phản hồi 503 (Service Unavailable) để nói cho Client khi nào thì nó có thể lặp lại yêu cầu
Set-CookieTrường này xác định một cookie mà liên kết với trang

Đối tượng HttpServletResponse trong JSP

Đối tượng response là một minh họa của đối tượng javax.servlet.http.HttpServletResponse. Ngay khi Server tạo đối tượng request, nó cũng tạo một đối tượng để biểu diễn phản hồi tới Client.

Đối tượng Response cũng định nghĩa các Interface mà thực hiện việc tạo các HTTP header mới. Thông qua đối tượng này, lập trình viên JSP có thể thêm các Cookie mới hoặc Date, HTTP Status code, …

Dưới đây là các phương thức có thể được sử dụng để thiết lập HTTP response Header trong chương trình JSP của bạn. Những phương thức này có sẵn với đối tượng HttpServletResponse mà biểu diễn Server Response.

STTPhương thức và Miêu tả
1String encodeRedirectURL(String url)

Mã hóa URL đã cho để sử dụng trong phương thức sendRederect, hoặc nếu mã hóa này không được đòi hỏi, thì trả về URL như cũ

2String encodeURL(String url)

Mã hóa URL đã cho bằng việc thêm ID của session trong nó, hoặc nếu mã hóa này không được đòi hỏi, thì trả về URL như cũ

3boolean containsHeader(String name)

Trả về một Boolean chỉ rằng có hay không header phản hồi với tên đã cho đã được thiết lập

4boolean isCommitted()

Trả về một Boolean chỉ rằng nếu phản hồi đã được commit

5void addCookie(Cookie cookie)

Thêm cookie đã cho tới phản hồi

6void addDateHeader(String name, long date)

Thêm một header phản hồi với tên và giá trị date đã cho

7void addHeader(String name, String value)

Thêm một header phản hồi với tên và giá trị đã cho

8void addIntHeader(String name, int value)

Thêm một header phản hồi với tên và giá trị integer đã cho

9void flushBuffer()

Force bất kỳ nội dung nào trong Buffer để được ghi tới Client đó

10void reset()

Xóa bất dữ liệu nào tồn tại trong buffer cũng như Status code và các trường header

11void resetBuffer()

Xóa nội dung của buffer nằm dưới trong phản hồi mà không xóa các trường header và status code

12void sendError(int sc)

Gửi một phản hồi lỗi tới Client bởi sử dụng Status code đã cho và xóa buffer

13void sendError(int sc, String msg)

Gửi một phản hồi lỗi tới Client bởi sử dụng Status code đã cho

14void sendRedirect(String location)

Gửi một phản hồi Redirect tạm thời tới Client bởi sử dụng địc chỉ URL để Redirect đã cho

15void setBufferSize(int size)

Thiết lập kích cỡ buffer cho thân phản hồi

16void setCharacterEncoding(String charset)

Thiết lập mã hóa ký tự (MIME Charset) của phản hồi đang được gửi tới Client, ví dụ, thiết lập là UTF-8

17void setContentLength(int len)

Thiết lập độ dài nội dung của thân phản hồi trong HTTP Servlet, phương thức này thiết lập trường header là HTTP Content-Length

18void setContentType(String type)

Thiết lập kiểu nội dung của phản hồi đang được gửi tới Client, nếu phản hồi vẫn chưa được commit

19void setDateHeader(String name, long date)

Thiết lập một header phản hồi với tên và giá trị date đã cho

20void setHeader(String name, String value)

Thiết lập một header phản hồi với tên và giá trị đã cho

21void setIntHeader(String name, int value)

Thiết lập một header phản hồi với tên và giá trị integer đã cho

22void setLocale(Locale loc)

Thiết lập Locale của phản hồi, nếu phản hồi vẫn chưa được commit

23void setStatus(int sc)

Thiết lập Status code cho phản hồi này

Ví dụ về HTTP Header Response trong JSP

Ví dụ sau sẽ sử dụng phương thức setIntHeader() để thiết lập Refresh Header để đóng vai một digital clock.

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
   // Set refresh, autoload time as 5 seconds
   response.setIntHeader("Refresh", 5);
   // 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;
   out.println("Current Time is: " + CT + "
");
%>
</center>
</body>
</html>

Bây giờ, bạn đặt code trên trong main.jsp và thử truy cập nó. Nó sẽ hiển thị System time sau mỗi 5s. Chạy JSP và đợi kết quả:

Auto Refresh Header Example

Current Time is: 9:44:50 PM

Để làm quen với các phương thức này, bạn thử viết các chương trình sử dụng các phương thức trên theo cách thức tương tự trên.

0