JSP - การตอบสนองของเซิร์ฟเวอร์
ในบทนี้เราจะพูดถึงการตอบสนองของเซิร์ฟเวอร์ใน JSP เมื่อเว็บเซิร์ฟเวอร์ตอบสนองต่อคำร้องขอ HTTP โดยทั่วไปการตอบสนองจะประกอบด้วยบรรทัดสถานะส่วนหัวการตอบกลับบรรทัดว่างและเอกสาร คำตอบทั่วไปมีลักษณะดังนี้ -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
บรรทัดสถานะประกอบด้วยเวอร์ชัน HTTP (HTTP/1.1 in the example)รหัสสถานะ (200 in the example)และข้อความสั้น ๆ ที่สอดคล้องกับรหัสสถานะ (OK in the example).
ต่อไปนี้เป็นข้อมูลสรุปของส่วนหัวการตอบกลับ HTTP 1.1 ที่มีประโยชน์ที่สุดซึ่งกลับไปที่เบราว์เซอร์จากเว็บเซิร์ฟเวอร์ ส่วนหัวเหล่านี้มักใช้ในการเขียนโปรแกรมเว็บ -
ส. | ส่วนหัวและคำอธิบาย |
---|---|
1 | Allow ส่วนหัวนี้ระบุวิธีการร้องขอ (GET, POSTฯลฯ ) ที่เซิร์ฟเวอร์รองรับ |
2 | Cache-Control ส่วนหัวนี้ระบุสถานการณ์ที่สามารถแคชเอกสารตอบกลับได้อย่างปลอดภัย มันสามารถมีค่าpublic, private หรือ no-cache เป็นต้นเอกสารสาธารณะหมายถึงแคชได้เอกสารหมายถึงส่วนตัวมีไว้สำหรับผู้ใช้คนเดียวและสามารถเก็บไว้ในแคชส่วนตัว (ที่ไม่ใช้ร่วมกัน) เท่านั้นและไม่ควรแคชหมายถึงเอกสาร |
3 | Connection ส่วนหัวนี้จะแนะนำเบราว์เซอร์ว่าจะใช้การเชื่อมต่อ HTTP แบบต่อเนื่องหรือไม่ ค่าของclose สั่งให้เบราว์เซอร์ไม่ใช้การเชื่อมต่อ HTTP แบบต่อเนื่องและ keep-alive หมายถึงการใช้การเชื่อมต่อแบบต่อเนื่อง |
4 | Content-Disposition ส่วนหัวนี้ช่วยให้คุณขอให้เบราว์เซอร์ขอให้ผู้ใช้บันทึกการตอบกลับลงในดิสก์ในไฟล์ชื่อที่กำหนด |
5 | Content-Encoding ส่วนหัวนี้ระบุวิธีการเข้ารหัสเพจระหว่างการส่ง |
6 | Content-Language ส่วนหัวนี้หมายถึงภาษาที่ใช้เขียนเอกสาร ตัวอย่างเช่น,en, en-us, ru, เป็นต้น |
7 | Content-Length ส่วนหัวนี้ระบุจำนวนไบต์ในการตอบสนอง ข้อมูลนี้จำเป็นเฉพาะในกรณีที่เบราว์เซอร์ใช้การเชื่อมต่อ HTTP แบบต่อเนื่อง (คงอยู่) |
8 | Content-Type ส่วนหัวนี้ให้ไฟล์ MIME (Multipurpose Internet Mail Extension) ประเภทของเอกสารตอบกลับ |
9 | Expires ส่วนหัวนี้ระบุเวลาที่ควรพิจารณาว่าเนื้อหาล้าสมัยและไม่ถูกแคชอีกต่อไป |
10 | Last-Modified ส่วนหัวนี้ระบุว่าเอกสารถูกเปลี่ยนแปลงล่าสุดเมื่อใด จากนั้นไคลเอนต์สามารถแคชเอกสารและระบุวันที่โดยไฟล์If-Modified-Since ขอส่วนหัวในการร้องขอในภายหลัง |
11 | Location ส่วนหัวนี้ควรรวมอยู่ในคำตอบทั้งหมดที่มีรหัสสถานะในยุค 300 สิ่งนี้จะแจ้งเบราว์เซอร์ของที่อยู่เอกสาร เบราว์เซอร์จะเชื่อมต่อกับตำแหน่งนี้อีกครั้งโดยอัตโนมัติและดึงเอกสารใหม่ |
12 | Refresh ส่วนหัวนี้ระบุว่าเบราว์เซอร์ควรจะขอเพจที่อัปเดตเร็วแค่ไหน คุณสามารถระบุเวลาเป็นจำนวนวินาทีหลังจากนั้นจะรีเฟรชหน้า |
13 | Retry-After ส่วนหัวนี้สามารถใช้ร่วมกับไฟล์ 503 (Service Unavailable) ตอบกลับเพื่อแจ้งให้ลูกค้าทราบว่าจะสามารถทำซ้ำคำขอได้เร็วแค่ไหน |
14 | Set-Cookie ส่วนหัวนี้ระบุคุกกี้ที่เกี่ยวข้องกับเพจ |
วัตถุ HttpServletResponse
วัตถุตอบกลับเป็นตัวอย่างของไฟล์ javax.servlet.http.HttpServletResponse object. เช่นเดียวกับที่เซิร์ฟเวอร์สร้างอ็อบเจ็กต์คำร้องขอมันยังสร้างอ็อบเจ็กต์เพื่อแสดงการตอบสนองไปยังไคลเอนต์
อ็อบเจ็กต์การตอบสนองยังกำหนดอินเทอร์เฟซที่จัดการกับการสร้างส่วนหัว HTTP ใหม่ ผ่านวัตถุนี้โปรแกรมเมอร์ JSP สามารถเพิ่มคุกกี้ใหม่หรือการประทับวันที่รหัสสถานะ HTTP เป็นต้น
สามารถใช้วิธีการต่อไปนี้เพื่อตั้งค่าส่วนหัวการตอบกลับ HTTP ในโปรแกรม servlet ของคุณ วิธีการเหล่านี้พร้อมใช้งานกับอ็อบเจ็กต์HttpServletResponse วัตถุนี้แสดงถึงการตอบสนองของเซิร์ฟเวอร์
ส. | วิธีการและคำอธิบาย |
---|---|
1 | String encodeRedirectURL(String url) เข้ารหัส URL ที่ระบุเพื่อใช้ในไฟล์ sendRedirect วิธีการหรือหากไม่จำเป็นต้องเข้ารหัสจะส่งคืน URL ที่ไม่เปลี่ยนแปลง |
2 | String encodeURL(String url) เข้ารหัส URL ที่ระบุโดยรวมรหัสเซสชันไว้ในนั้นหรือหากไม่จำเป็นต้องเข้ารหัสจะส่งคืน URL ที่ไม่เปลี่ยนแปลง |
3 | boolean containsHeader(String name) ส่งคืนบูลีนที่ระบุว่ามีการตั้งค่าส่วนหัวการตอบกลับที่ตั้งชื่อแล้ว |
4 | boolean isCommitted() ส่งคืนบูลีนที่ระบุว่ามีการตอบสนองหรือไม่ |
5 | void addCookie(Cookie cookie) เพิ่มคุกกี้ที่ระบุในการตอบกลับ |
6 | void addDateHeader(String name, long date) เพิ่มส่วนหัวการตอบกลับด้วยชื่อที่กำหนดและวันที่ - ค่า |
7 | void addHeader(String name, String value) เพิ่มส่วนหัวการตอบกลับด้วยชื่อและค่าที่กำหนด |
8 | void addIntHeader(String name, int value) เพิ่มส่วนหัวการตอบกลับด้วยชื่อที่กำหนดและค่าจำนวนเต็ม |
9 | void flushBuffer() บังคับให้เขียนเนื้อหาใด ๆ ในบัฟเฟอร์ไปยังไคลเอนต์ |
10 | void reset() ล้างข้อมูลใด ๆ ที่มีอยู่ในบัฟเฟอร์ตลอดจนรหัสสถานะและส่วนหัว |
11 | void resetBuffer() ล้างเนื้อหาของบัฟเฟอร์ที่อยู่เบื้องหลังในการตอบกลับโดยไม่ต้องล้างส่วนหัวหรือรหัสสถานะ |
12 | void sendError(int sc) ส่งการตอบสนองข้อผิดพลาดไปยังไคลเอ็นต์โดยใช้รหัสสถานะที่ระบุและล้างบัฟเฟอร์ |
13 | void sendError(int sc, String msg) ส่งการตอบสนองข้อผิดพลาดไปยังไคลเอ็นต์โดยใช้สถานะที่ระบุ |
14 | void sendRedirect(String location) ส่งการตอบกลับการเปลี่ยนเส้นทางชั่วคราวไปยังไคลเอนต์โดยใช้ URL ตำแหน่งการเปลี่ยนเส้นทางที่ระบุ |
15 | void setBufferSize(int size) ตั้งค่าขนาดบัฟเฟอร์ที่ต้องการสำหรับเนื้อหาของการตอบสนอง |
16 | void setCharacterEncoding(String charset) ตั้งค่าการเข้ารหัสอักขระ (ชุดอักขระ MIME) ของการตอบกลับที่ส่งไปยังไคลเอ็นต์เช่นเป็น UTF-8 |
17 | void setContentLength(int len) ตั้งค่าความยาวของเนื้อหาในการตอบสนองใน HTTP servlets; วิธีนี้ยังตั้งค่าส่วนหัว HTTP Content-Length |
18 | void setContentType(String type) ตั้งค่าชนิดเนื้อหาของการตอบกลับที่ส่งไปยังไคลเอ็นต์หากการตอบกลับยังไม่ได้รับการยืนยัน |
19 | void setDateHeader(String name, long date) ตั้งค่าส่วนหัวการตอบกลับด้วยชื่อที่กำหนดและวันที่ - ค่า |
20 | void setHeader(String name, String value) ตั้งค่าส่วนหัวของการตอบกลับด้วยชื่อและค่าที่กำหนด |
21 | void setIntHeader(String name, int value) ตั้งค่าส่วนหัวของการตอบกลับด้วยชื่อที่กำหนดและค่าจำนวนเต็ม |
22 | void setLocale(Locale loc) ตั้งค่าภาษาของการตอบกลับหากการตอบกลับยังไม่ได้รับการยืนยัน |
23 | void setStatus(int sc) ตั้งค่ารหัสสถานะสำหรับการตอบกลับนี้ |
ตัวอย่างการตอบสนองส่วนหัวของ HTTP
ตัวอย่างต่อไปนี้จะใช้ setIntHeader() วิธีการตั้งค่า Refresh ส่วนหัวเพื่อจำลองนาฬิกาดิจิตอล -
<%@ 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 + "\n");
%>
</center>
</body>
</html>
ตอนนี้ใส่รหัสด้านบน main.jspและพยายามเข้าถึง ซึ่งจะแสดงเวลาของระบบปัจจุบันหลังจากทุกๆ 5 วินาทีดังนี้ เรียกใช้ JSP คุณจะได้รับผลลัพธ์ต่อไปนี้: -
Auto Refresh Header Example
Current Time is: 9:44:50 PM
คุณสามารถลองหาวิธีอื่น ๆ ในลักษณะเดียวกัน