ออบเจ็กต์ Response ส่วนใหญ่จะส่งผลลัพธ์ที่ประมวลผลโดยคอนเทนเนอร์ JSP กลับไปยังไคลเอนต์ คุณสามารถตั้งค่าสถานะ HTTP และส่งข้อมูลไปยังไคลเอนต์ผ่านตัวแปรตอบสนอง เช่น คุกกี้ ข้อมูลส่วนหัวของไฟล์ HTTP เป็นต้น
การตอบสนองโดยทั่วไปจะมีลักษณะดังนี้:
HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ...HeaderN: ... (บรรทัดว่าง)<!doctype ...><html><head>...</head><body> ... </body></html>
บรรทัดสถานะประกอบด้วยข้อมูลเวอร์ชัน HTTP เช่น HTTP/1.1 รหัสสถานะ เช่น 200 และข้อความสั้นมากที่สอดคล้องกับรหัสสถานะ เช่น ตกลง
ตารางต่อไปนี้สรุปส่วนที่มีประโยชน์ที่สุดของส่วนหัวการตอบกลับ HTTP 1.1 ซึ่งคุณมักจะเห็นในการเขียนโปรแกรมเครือข่าย:
ส่วนหัวของการตอบกลับ | อธิบาย |
---|---|
อนุญาต | ระบุวิธีการร้องขอที่เซิร์ฟเวอร์รองรับ (GET, POST ฯลฯ) |
การควบคุมแคช | ระบุสถานการณ์ที่สามารถแคชเอกสารตอบกลับได้อย่างปลอดภัย โดยปกติแล้วค่าจะเป็น public , private หรือ no-cache ฯลฯ สาธารณะหมายความว่าเอกสารนั้นสามารถแคชได้ และส่วนตัวหมายความว่าเอกสารนั้นให้บริการแก่ผู้ใช้รายเดียวเท่านั้นและสามารถใช้ได้เฉพาะแคชส่วนตัวเท่านั้น No-cache หมายความว่าเอกสารไม่ได้ถูกแคช |
การเชื่อมต่อ | สั่งให้เบราว์เซอร์ว่าจะใช้การเชื่อมต่อ HTTP แบบถาวรหรือไม่ ค่า ปิด จะสั่งให้เบราว์เซอร์ไม่ใช้การเชื่อมต่อ HTTP แบบถาวร ในขณะที่ Keep-alive หมายถึงการใช้การเชื่อมต่อแบบถาวร |
การจัดการเนื้อหา | ให้เบราว์เซอร์ขอให้ผู้ใช้เก็บการตอบสนองไว้บนดิสก์ภายใต้ชื่อที่กำหนด |
การเข้ารหัสเนื้อหา | ระบุกฎการเข้ารหัสสำหรับเพจระหว่างการส่ง |
เนื้อหา-ภาษา | ภาษาที่ใช้แสดงเอกสาร เช่น en, en-us, ru เป็นต้น |
ความยาวของเนื้อหา | ระบุจำนวนไบต์ในการตอบกลับ มีประโยชน์เฉพาะในกรณีที่เบราว์เซอร์ใช้การเชื่อมต่อ HTTP แบบ Keep-alive |
เนื้อหา-ประเภท | ระบุประเภท MIME ที่ใช้โดยเอกสาร |
หมดอายุ | ระบุว่าจะหมดอายุเมื่อใดและลบออกจากแคช |
แก้ไขครั้งล่าสุด | ระบุว่าเอกสารได้รับการแก้ไขครั้งล่าสุดเมื่อใด ไคลเอนต์สามารถแคชเอกสารและจัดเตรียมส่วนหัวคำขอ If-Modified-Since ในคำขอครั้งต่อไป |
ที่ตั้ง | ภายใน 300 วินาที รวมถึงที่อยู่ตอบกลับทั้งหมดที่มีรหัสสถานะ เบราว์เซอร์จะเชื่อมต่อและดึงเอกสารใหม่โดยอัตโนมัติ |
รีเฟรช | ระบุความถี่ที่เบราว์เซอร์ร้องขอการอัปเดตไปยังเพจ |
ลองอีกครั้งหลังจาก | ใช้กับ 503 (บริการไม่พร้อมใช้งาน) เพื่อบอกผู้ใช้ว่าจะใช้เวลานานเท่าใดก่อนที่คำขอจะได้รับการตอบกลับ |
ชุดคุกกี้ | ระบุคุกกี้ที่สอดคล้องกับหน้าปัจจุบัน |
อ็อบเจ็กต์การตอบสนองเป็นอินสแตนซ์ของคลาส javax.servlet.http.HttpServletResponse เช่นเดียวกับที่เซิร์ฟเวอร์สร้างออบเจ็กต์คำขอ เซิร์ฟเวอร์ก็สร้างการตอบกลับของไคลเอ็นต์ด้วย
วัตถุตอบสนองกำหนดอินเทอร์เฟซสำหรับจัดการการสร้างส่วนหัว HTTP เมื่อใช้ออบเจ็กต์นี้ นักพัฒนาสามารถเพิ่มคุกกี้ใหม่หรือการประทับเวลา รหัสสถานะ HTTP และอื่นๆ อีกมากมาย
ตารางต่อไปนี้แสดงวิธีการที่ใช้ในการตั้งค่าส่วนหัวการตอบสนอง HTTP วิธีการเหล่านี้มีให้โดยคลาส HttpServletResponse:
ส.น | วิธีการ และ คำอธิบาย |
---|---|
1 | สตริง encodeRedirectURL(String url) เข้ารหัส URL ที่ใช้โดยเมธอด sendRedirect() |
2 | สตริง encodeURL(String url) เข้ารหัส URL และส่งกลับ URL ที่มีรหัสเซสชัน |
3 | บูลีน containsHeader(ชื่อสตริง) ส่งคืนว่ามีส่วนหัวการตอบกลับที่ระบุอยู่หรือไม่ |
4 | boolean isCommission() ส่งคืนว่าการตอบกลับถูกส่งไปยังไคลเอนต์หรือไม่ |
5 | เป็นโมฆะ addCookie (คุกกี้คุกกี้) เพิ่มคุกกี้ที่ระบุในการตอบกลับ |
6 | เป็นโมฆะ addDateHeader (ชื่อสตริง, วันที่แบบยาว) เพิ่มส่วนหัวการตอบกลับและค่าวันที่ของชื่อที่ระบุ |
7 | เป็นโมฆะ addHeader (ชื่อสตริง ค่าสตริง) เพิ่มส่วนหัวการตอบสนองและค่าของชื่อที่ระบุ |
8 | เป็นโมฆะ addIntHeader (ชื่อสตริง, ค่า int) เพิ่มส่วนหัวการตอบกลับและค่า int ของชื่อที่ระบุ |
9 | void flushBuffer() เขียนเนื้อหาของแคชใด ๆ ไปยังไคลเอนต์ |
10 | void reset() จะล้างข้อมูลในแคช รวมถึงรหัสสถานะและส่วนหัวการตอบกลับต่างๆ |
11 | void resetBuffer() จะล้างข้อมูลแคชพื้นฐาน ไม่รวมส่วนหัวการตอบกลับและรหัสสถานะ |
12 | void sendError(int sc) ส่งการตอบสนองข้อผิดพลาดไปยังไคลเอนต์โดยใช้รหัสสถานะที่ระบุ จากนั้นล้างแคช |
13 | void sendError(int sc, String msg) ส่งการตอบกลับข้อผิดพลาดไปยังไคลเอนต์โดยใช้รหัสสถานะและข้อความที่ระบุ |
14 | เป็นโมฆะ sendRedirect (ตำแหน่งสตริง) ส่งการตอบสนองทางอ้อมชั่วคราวไปยังไคลเอนต์โดยใช้ URL ที่ระบุ |
15 | void setBufferSize(int size) กำหนดขนาดบัฟเฟอร์ของเนื้อหาการตอบสนอง |
16 | เป็นโมฆะ setCharacterEncoding(ชุดอักขระสตริง) ระบุชุดการเข้ารหัสการตอบสนอง (ชุดอักขระ MIME) เช่น UTF-8 |
17 | เป็นโมฆะ setContentLength(int len) ระบุความยาวของเนื้อหาการตอบสนองในเซิร์ฟเล็ต HTTP วิธีการนี้ใช้เพื่อตั้งค่าส่วนหัวข้อมูลความยาวเนื้อหา HTTP |
18 | ถือเป็นโมฆะ setContentType(ประเภทสตริง) ตั้งค่าประเภทเนื้อหาของการตอบกลับ หากยังไม่ได้ส่งการตอบกลับ |
19 | เป็นโมฆะ setDateHeader (ชื่อสตริง, วันที่แบบยาว) ตั้งชื่อและเนื้อหาของส่วนหัวการตอบกลับโดยใช้ชื่อและค่าที่ระบุ |
20 | เป็นโมฆะ setHeader (ชื่อสตริง, ค่าสตริง) ตั้งชื่อและเนื้อหาของส่วนหัวการตอบกลับโดยใช้ชื่อและค่าที่ระบุ |
ยี่สิบเอ็ด | เป็นโมฆะ setIntHeader (ชื่อสตริง, ค่า int) ตั้งชื่อและเนื้อหาของส่วนหัวการตอบกลับโดยใช้ชื่อและค่าที่ระบุ |
ยี่สิบสอง | void setLocale(Locale loc) ตั้งค่าโลแคลของการตอบกลับ หากยังไม่ได้ส่งการตอบกลับ |
ยี่สิบสาม | void setStatus(int sc) ตั้งค่ารหัสสถานะของการตอบกลับ |
ตัวอย่างต่อไปนี้ใช้เมธอด setIntHeader() และเมธอด setRefreshHeader() เพื่อจำลองนาฬิกาดิจิทัล:
<%@ page import="java.io.*,java.util.*" %><html><head><title>ตัวอย่างส่วนหัวรีเฟรชอัตโนมัติ</title></head><body><center><h2 >ตัวอย่างส่วนหัวรีเฟรชอัตโนมัติ</h2><% //ตั้งค่าการรีเฟรชอัตโนมัติทุกๆ 5 วินาที response.setIntHeader("Refresh", 5); // รับเวลาปัจจุบัน ปฏิทินปฏิทิน = new GregorianCalendar(); am_pm; int hour = Calendar.get(Calendar.HOUR); int นาที = Calendar.get(Calendar.MINUTE); int Second = Calendar.get(Calendar.SECOND); 0) am_pm = "AM"; else am_pm = "PM"; สตริง CT = ชั่วโมง+:+ นาที +:+ วินาที +" "+ am_pm; out.println("เวลาปัจจุบันคือ: " + CT + "n"); %></center></body></html>
บันทึกโค้ดด้านบนเป็น main.jsp และเข้าถึงผ่านเบราว์เซอร์ของคุณ โดยจะแสดงเวลาระบบปัจจุบันทุกๆ 5 วินาที
ผลการวิ่งมีดังนี้:
ตัวอย่างส่วนหัวรีเฟรชอัตโนมัติเวลาปัจจุบันคือ: 21:44:50 น
คุณยังสามารถแก้ไขโค้ดข้างต้นได้ด้วยตัวเองและลองใช้วิธีอื่นเพื่อทำความเข้าใจให้ลึกซึ้งยิ่งขึ้น