เมื่อเบราว์เซอร์ร้องขอหน้าเว็บ มันจะส่งข้อมูลชุดหนึ่งไปยังเว็บเซิร์ฟเวอร์ที่ไม่สามารถอ่านได้โดยตรง เนื่องจากข้อมูลถูกส่งเป็นส่วนหนึ่งของส่วนหัว HTTP คุณสามารถตรวจสอบโปรโตคอล HTTP สำหรับข้อมูลเพิ่มเติม
ตารางต่อไปนี้แสดงเนื้อหาที่สำคัญบางประการของส่วนหัวข้อมูลฝั่งเบราว์เซอร์ คุณมักจะเห็นข้อมูลนี้ในการเขียนโปรแกรมเครือข่ายในอนาคต:
ข้อมูล | อธิบาย |
---|---|
ยอมรับ | ระบุประเภท MIME ที่เบราว์เซอร์หรือไคลเอ็นต์อื่นๆ จัดการได้ โดยปกติค่าจะเป็น image/png หรือ image/jpeg |
ยอมรับ Charset | ระบุชุดอักขระที่จะใช้โดยเบราว์เซอร์ เช่น ISO-8859-1 |
ยอมรับการเข้ารหัส | ระบุประเภทการเข้ารหัส โดยปกติค่าของมันจะเป็น gzip หรือ compress |
ยอมรับภาษา | ระบุภาษาที่ต้องการของไคลเอ็นต์ เซิร์ฟเล็ตจะให้ความสำคัญกับการส่งคืนชุดผลลัพธ์ในภาษาปัจจุบัน หากเซิร์ฟเล็ตรองรับภาษานี้ เช่น en, en-us, ru เป็นต้น |
การอนุญาต | ระบุผู้ใช้ที่แตกต่างกันเมื่อเข้าถึงหน้าเว็บที่มีการป้องกันด้วยรหัสผ่าน |
การเชื่อมต่อ | ระบุว่าไคลเอ็นต์สามารถจัดการการเชื่อมต่อ HTTP แบบถาวรได้หรือไม่ การเชื่อมต่อแบบถาวรทำให้ไคลเอ็นต์หรือเบราว์เซอร์ดึงข้อมูลหลายไฟล์ได้ในคำขอเดียว Keep-Alive หมายถึงการเปิดใช้งานการเชื่อมต่อแบบถาวร |
ความยาวของเนื้อหา | ใช้กับคำขอ POST เท่านั้น โดยระบุจำนวนไบต์ของข้อมูล POST |
คุกกี้ | ส่งคืนคุกกี้ที่ส่งไปยังเบราว์เซอร์ก่อนหน้านี้ไปยังเซิร์ฟเวอร์ |
เจ้าภาพ | ระบุชื่อโฮสต์และหมายเลขพอร์ตใน URL ดั้งเดิม |
ถ้า-แก้ไข-ตั้งแต่ | บ่งชี้ว่าไคลเอ็นต์ต้องการหน้าเว็บนี้เฉพาะเมื่อมีการแก้ไขตามวันที่ที่ระบุ เซิร์ฟเวอร์ส่งรหัส 304 ไปยังไคลเอนต์ โดยระบุว่าไม่มีทรัพยากรที่อัปเดต |
ถ้า-ไม่ได้แก้ไข-ตั้งแต่ | ตรงกันข้ามกับ If-Modified-Since การดำเนินการจะสำเร็จก็ต่อเมื่อเอกสารไม่ได้รับการแก้ไขตั้งแต่วันที่ระบุ |
ผู้อ้างอิง | ทำเครื่องหมาย URL ของหน้าที่อ้างอิง ตัวอย่างเช่น หากคุณอยู่ที่หน้าที่ 1 แล้วคลิกลิงก์ไปยังหน้าที่ 2 URL ของหน้าที่ 1 จะรวมอยู่ในส่วนหัวของคำขอเบราว์เซอร์สำหรับหน้าที่ 2 |
ผู้ใช้-ตัวแทน | ใช้เพื่อแยกแยะคำขอที่ส่งโดยเบราว์เซอร์หรือไคลเอนต์ที่แตกต่างกัน และส่งคืนเนื้อหาที่แตกต่างกันไปยังเบราว์เซอร์ประเภทต่างๆ |
วัตถุคำขอเป็นอินสแตนซ์ของคลาส javax.servlet.http.HttpServletRequest เมื่อใดก็ตามที่ไคลเอ็นต์ร้องขอเพจ กลไก JSP จะสร้างอ็อบเจ็กต์ใหม่เพื่อแสดงถึงคำขอ
ออบเจ็กต์คำขอมีชุดวิธีการในการรับส่วนหัวข้อมูล HTTP รวมถึงข้อมูลแบบฟอร์ม คุกกี้ วิธี HTTP ฯลฯ
ต่อไป เราจะแนะนำวิธีการบางอย่างที่ใช้กันทั่วไปในการเขียนโปรแกรม JSP เพื่อรับส่วนหัวข้อมูล HTTP โปรดดูตารางด้านล่างสำหรับรายละเอียด:
หมายเลขซีเรียล | วิธีการ และ คำอธิบาย |
---|---|
1 | Cookie[] getCookies() ส่งคืนอาร์เรย์ของคุกกี้ทั้งหมดบนไคลเอนต์ |
2 | การแจงนับ getAttributeNames() ส่งคืนคอลเลกชันของชื่อแอตทริบิวต์ทั้งหมดของออบเจ็กต์คำขอ |
3 | การแจงนับ getHeaderNames() ส่งคืนชุดชื่อของส่วนหัว HTTP ทั้งหมด |
4 | การแจงนับ getParameterNames() ส่งคืนชุดของพารามิเตอร์ทั้งหมดในคำขอ |
5 | HttpSession getSession() ส่งคืนอ็อบเจ็กต์เซสชันที่สอดคล้องกับคำขอ หากไม่เป็นเช่นนั้น ให้สร้างขึ้นใหม่ |
6 | HttpSession getSession(boolean create) ส่งคืนอ็อบเจ็กต์เซสชันที่สอดคล้องกับคำขอ หากไม่มีและการสร้างพารามิเตอร์เป็นจริง วัตถุเซสชันใหม่จะถูกส่งคืน |
7 | Locale getLocale() ส่งคืนอ็อบเจ็กต์ Locale ของเพจปัจจุบัน ซึ่งสามารถตั้งค่าเพื่อตอบสนองได้ |
8 | วัตถุ getAttribute(String name) ส่งคืนค่าแอตทริบิวต์ที่มีชื่อหรือเป็นโมฆะหากไม่มีอยู่ |
9 | ServletInputStream getInputStream() ส่งคืนสตรีมอินพุตที่ร้องขอ |
10 | สตริง getAuthType() ส่งคืนชื่อของรูปแบบการตรวจสอบสิทธิ์ที่ใช้เพื่อปกป้องเซิร์ฟเล็ต เช่น "BASIC" หรือ "SSL" หรือ null หาก JSP ไม่ได้ตั้งค่ามาตรการป้องกัน |
11 | สตริง getCharacterEncoding() ส่งคืนชื่อชุดการเข้ารหัสอักขระของคำขอ |
12 | สตริง getContentType() ส่งคืนประเภท MIME ของเนื้อหาคำขอ หรือเป็นค่าว่างหากไม่ทราบ |
13 | สตริง getContextPath() ส่งคืนเส้นทางบริบทที่ระบุใน URI คำขอ |
14 | String getHeader(String name) ส่งคืนส่วนหัวข้อมูลที่ระบุตามชื่อ |
15 | สตริง getMethod() ส่งคืนเมธอด HTTP ในคำขอนี้ เช่น GET, POST หรือ PUT |
16 | สตริง getParameter(String name) ส่งคืนพารามิเตอร์ที่ระบุโดยชื่อในคำขอนี้ หรือเป็นค่าว่างหากไม่มีอยู่ |
17 | สตริง getPathInfo() ส่งคืนเส้นทางเพิ่มเติมที่เกี่ยวข้องกับ URL คำขอนี้ |
18 | สตริง getProtocol() ส่งคืนชื่อโปรโตคอลและเวอร์ชันที่ใช้โดยคำขอนี้ |
19 | String getQueryString() ส่งคืนสตริงการสืบค้นที่มีอยู่ใน URL คำขอนี้ |
20 | สตริง getRemoteAddr() ส่งคืนที่อยู่ IP ของลูกค้า |
ยี่สิบเอ็ด | สตริง getRemoteHost() ส่งคืนชื่อเต็มของไคลเอ็นต์ |
ยี่สิบสอง | สตริง getRemoteUser() ส่งคืนผู้ใช้ที่รับรองความถูกต้องโดยไคลเอนต์ผ่านการเข้าสู่ระบบ หรือคืนค่า null หากผู้ใช้ไม่ได้รับการรับรองความถูกต้อง |
ยี่สิบสาม | สตริง getRequestURI() ส่งคืน URI ของคำขอ |
ยี่สิบสี่ | สตริง getRequestedSessionId() ส่งคืน ID เซสชันที่ระบุตามคำขอ |
25 | สตริง getServletPath() ส่งคืนเส้นทางเซิร์ฟเล็ตที่ร้องขอ |
26 | String[] getParameterValues(ชื่อสตริง) ส่งคืนค่าทั้งหมดของพารามิเตอร์ที่มีชื่อที่ระบุหรือเป็นค่าว่างหากไม่มีอยู่ |
27 | boolean isSecure() ส่งคืนว่าคำขอใช้ช่องทางที่เข้ารหัส เช่น HTTPS หรือไม่ |
28 | int getContentLength() ส่งคืนจำนวนไบต์ที่มีอยู่ในเนื้อหาคำขอ หากไม่ทราบ ก็จะส่งคืน -1 |
29 | int getIntHeader(String name) ส่งคืนค่าของส่วนหัวคำขอด้วยชื่อที่ระบุ |
30 | int getServerPort() ส่งคืนหมายเลขพอร์ตเซิร์ฟเวอร์ |
ในตัวอย่างนี้ เราจะใช้เมธอด getHeaderNames() ของคลาส HttpServletRequest เพื่ออ่านส่วนหัว HTTP วิธีการนี้ส่งคืนข้อมูลส่วนหัวของคำขอ HTTP ปัจจุบันในรูปแบบของการแจงนับ
หลังจากได้รับวัตถุการแจงนับแล้ว ให้ใช้วิธีการมาตรฐานเพื่อสำรวจวัตถุการแจงนับ โดยใช้วิธี hasMoreElements() เพื่อกำหนดเวลาที่จะหยุด และใช้วิธี nextElement() เพื่อรับชื่อของแต่ละพารามิเตอร์
<%@ page import="java.io.*,java.util.*" %><html><head><title>ตัวอย่างคำขอส่วนหัว HTTP</title></head><body><center><h2 >ตัวอย่างคำขอส่วนหัว HTTP</h2><table align="center"><tr bgcolor="#949494"><th>ชื่อส่วนหัว</th><th>ค่าส่วนหัว</th></tr ><% การแจงนับ headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td> n"); สตริง paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>n"); }%></table></center></body></html>
เข้าถึง main.jsp คุณจะได้รับผลลัพธ์ดังต่อไปนี้:
ชื่อส่วนหัว | ค่าส่วนหัว |
---|---|
ยอมรับ | - |
ยอมรับภาษา | กับเรา |
ตัวแทนผู้ใช้ | Mozilla/4.0 (เข้ากันได้; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
ยอมรับการเข้ารหัส | gzip ยุบ |
เจ้าภาพ | โลคอลโฮสต์:8080 |
การเชื่อมต่อ | Keep-Alive |
การควบคุมแคช | ไม่มีแคช |
คุณสามารถลองใช้วิธีอื่นของคลาส HttpServletRequest ในโค้ดด้านบน