คำขอไคลเอนต์ JSP
การดำเนินการ JSP ที่ใช้โครงสร้างในไวยากรณ์ XML เพื่อควบคุมลักษณะการทำงานของเอ็นจิ้นเซิร์ฟเล็ต เราจะเรียนรู้รายละเอียดเพิ่มเติมเกี่ยวกับองค์ประกอบ JSP Action ต่างๆ เช่น คำขอไคลเอ็นต์ การตอบกลับของเซิร์ฟเวอร์ รหัสสถานะ HTTP
คำขอไคลเอนต์ JSP
- เมื่อมีการร้องขอหน้าเว็บ มันจะส่งข้อมูลไปยังเว็บเซิร์ฟเวอร์ในส่วนหัว HTTP
- เราสามารถใช้ข้อมูลนี้โดยใช้วัตถุ HTTPServletRequest
- ข้อมูลที่ส่งโดยเบราว์เซอร์จะถูกเก็บไว้ในส่วนหัวคำขอของคำขอ HTTP
- เรากำลังใช้ส่วนหัวที่แตกต่างกันเพื่อส่งข้อมูลไปยังวัตถุคำขอ
ส่วนหัวใน JSP
ส่วนหัวที่แตกต่างกันใน JSP มีอธิบายไว้ด้านล่าง:
| ส่วนหัว | Descriptไอออน | ตัวอย่าง |
|---|---|---|
| ยอมรับ | โดยจะระบุประเภท MIME ที่เบราว์เซอร์หรือไคลเอ็นต์อื่นๆ สามารถรองรับได้ | รูปภาพ/png หรือ รูปภาพ/jpeg |
| ยอมรับชุดอักขระ | ใช้ชุดอักขระที่เบราว์เซอร์ใช้เพื่อแสดงข้อมูล | ISO-8859 1- |
| ยอมรับ- การเข้ารหัส | ระบุประเภทของการเข้ารหัสที่จัดการโดยเบราว์เซอร์ | Gzip หรือบีบอัด |
| ยอมรับภาษา | มันระบุภาษาที่ลูกค้าระบุ | th,en_us |
| การอนุญาต | ส่วนหัวที่ไคลเอนต์ใช้เมื่อพยายามเข้าถึงหน้าเว็บที่มีการป้องกันด้วยรหัสผ่าน | |
| การเชื่อมต่อ | ระบุว่าไคลเอนต์สามารถจัดการการเชื่อมต่อ HTTP แบบถาวรได้หรือไม่ (เบราว์เซอร์สามารถดึงไฟล์ได้หลายไฟล์) | ให้มีชีวิตอยู่ |
| เนื้อหาความยาว | ใช้ได้กับการโพสต์คำขอ มันให้ขนาดของข้อมูลโพสต์เป็นไบต์ | |
| คุกกี้ | ส่งคืนคุกกี้ไปยังเซิร์ฟเวอร์ (คุกกี้ที่เคยส่งไปยังเบราว์เซอร์ก่อนหน้านี้) | |
| เจ้าของห้องพัก | ระบุโฮสต์และพอร์ตของ URL ดั้งเดิม | |
| หากมีการเปลี่ยนแปลงตั้งแต่ | ระบุว่าต้องการเพียงเพจเท่านั้นหากมีการเปลี่ยนแปลงหรือแก้ไข | |
| หากไม่มีการแก้ไขตั้งแต่นั้นเป็นต้นมา | ระบุว่าจำเป็นต้องมีเพจเฉพาะในกรณีที่ไม่มีการเปลี่ยนแปลงหรือแก้ไข | |
| อ้างอิง | ระบุ URL ของหน้า URL อ้างอิง | |
| ตัวแทนผู้ใช้ | ระบุเบราว์เซอร์หรือไคลเอ็นต์ที่ส่งคำขอ |
วิธีการส่วนหัว HTTP ใน JSP
ใช้วิธีการต่อไปนี้เพื่ออ่านส่วนหัว HTTP ในหน้า JSP:
- คุกกี้[]getCookies() – ส่งคืนอาร์เรย์ที่มีออบเจ็กต์คุกกี้ที่ไคลเอ็นต์ส่งไป
- การแจงนับ getAttributeNames() – มีการแจงนับชื่อของคุณลักษณะสำหรับการร้องขอ
- การแจงนับ getHeaderNames() – มีการแจงนับชื่อของส่วนหัว
- การแจงนับ getParameterNames() – มีการแจงนับการรับชื่อพารามิเตอร์ในคำขอ
- HttpSessiongetSession() – ส่งคืนเซสชันปัจจุบันที่เกี่ยวข้องกับคำขอ หรือหากไม่มีเซสชันก็จะสร้างเซสชันใหม่
- สถานที่เกิดเหตุ getLocale() – ส่งคืนตำแหน่งที่ต้องการที่ไคลเอนต์จะยอมรับเนื้อหา ถูกกำหนดให้กับการตอบสนอง โดยค่าเริ่มต้น ค่าจะเป็นตำแหน่งเริ่มต้นของเซิร์ฟเวอร์
- วัตถุ getAttribute (ชื่อสตริง) – ส่งกลับค่าของแอตทริบิวต์ที่มีชื่อเป็นวัตถุ
- ServletInputStreamgetInputStream() – ดึงเนื้อหาคำขอเป็นข้อมูลไบนารี
- สตริง getAuthType() – ส่งคืนชื่อของรูปแบบการรับรองความถูกต้องเพื่อปกป้องเซิร์ฟเล็ต
- สตริง getCharacterEncoding() – ส่งคืนชื่อของการเข้ารหัสอักขระที่ใช้ในเนื้อหาของคำขอ
- สตริง getContentType() – ส่งคืนเนื้อหาประเภท MIME ของคำขอ
- สตริง getContextPath() – ส่งคืนส่วนของคำขอ URI ระบุเส้นทางบริบทของ URI
- สตริง getHeader (ชื่อสตริง) – ส่งคืนส่วนหัวคำขอเป็นสตริง
- สตริง getMethod() – ส่งกลับชื่อของวิธี HTTP เช่น GET, POST
- สตริง getParameter (ชื่อสตริง) – ส่งคืนพารามิเตอร์ของคำขอเป็นสตริง
- สตริง getPathInfo() – ส่งคืนข้อมูลเส้นทางที่เกี่ยวข้องกับ URL
- สตริง getQueryString() – ส่งคืนสตริงการสืบค้นที่เกี่ยวข้องกับ URL คำขอ
- สตริง getServletPath() – ส่งคืนส่วนของ URL ของคำขอที่เรียกใช้ JSP
- String[] getParameterValues(ชื่อสตริง) – ส่งคืนอาร์เรย์ของวัตถุสตริงที่มีค่าที่พารามิเตอร์คำขอมี
ตัวอย่าง:
ในตัวอย่างด้านล่าง เรากำลังใช้วิธีการที่แตกต่างกันโดยใช้ออบเจ็กต์คำขอ
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.* java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Client Request Guru JSP</title>
</head>
<body>
<h2>Client Request Guru JSP</h2>
<table border="1">
<tr>
<th>guru header</th><th>guru header Value(s)</th>
</tr>
<%
HttpSession gurusession = request.getSession();
out.print("<tr><td>Session Name is </td><td>" +gurusession+ "</td.></tr>");
Locale gurulocale = request.getLocale ();
out.print("<tr><td>Locale Name is</td><td>" +gurulocale + "</td></tr>");
String path = request.getPathInfo();
out.print("<tr><td>Path Name is</td><td>" +path+ "</td></tr>");
String lpath = request.get();
out.print("<tr><td>Context path is</td><td>" +lipath + "</td></tr>");
String servername = request.getServerName();
out.print("<tr><td>Server Name is </td><td>" +servername+ "</td></tr>");
int portname = request.getServerPort();
out.print("<tr><td>Server Port is </td><td>" +portname+ "</td></tr>");
Enumeration hnames = request.getHeaderNames();
while(hnames.hasMoreElements()) {
String paramName = (String)hnames.nextElement();
out.print ("<tr><td>" + paramName + "</td>" );
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>");
}
%>
คำอธิบายของรหัส:
รหัสบรรทัด 17: การใช้อ็อบเจ็กต์คำขอ เราได้รับอ็อบเจ็กต์เซสชันของเซสชันนั้น และเราได้รับค่าอ็อบเจ็กต์ของเซสชันนั้น
รหัสบรรทัด 19: การใช้อ็อบเจ็กต์คำขอ เราได้รับโลแคลของเซสชันนั้นโดยเฉพาะ i.een_US locale สำหรับ JSP นั้น
รหัสบรรทัด 21: เมื่อใช้อ็อบเจ็กต์คำขอ เราได้รับข้อมูลเส้นทางสำหรับ JSP นั้น ในกรณีนี้ จะเป็นโมฆะเนื่องจากไม่มีเส้นทางสำหรับ URL ที่กล่าวถึง
รหัสบรรทัด 23: การใช้อ็อบเจ็กต์คำขอ เราได้รับพาธบริบท เช่น เส้นทางรูท
รหัสบรรทัด 25: การใช้วัตถุคำขอเราได้รับชื่อเซิร์ฟเวอร์
รหัสบรรทัด 27: การใช้อ็อบเจ็กต์คำขอ เราได้รับพอร์ตเซิร์ฟเวอร์
รหัสบรรทัด 29-35: การใช้อ็อบเจ็กต์คำขอ เราได้รับชื่อส่วนหัวซึ่งออกมาเป็นการแจงนับ และด้วยเหตุนี้เราจึงได้ค่าส่วนหัวทั้งหมดในชื่อส่วนหัว
ในที่นี้ เราได้รับค่าส่วนหัวทั้งหมดเป็น a คุกกี้, โฮสต์, การเชื่อมต่อ, ยอมรับภาษา, ยอมรับการเข้ารหัส
เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้:
เอาท์พุต:
เราได้รับชุดค่าต่างๆ เช่น ชื่อเซสชัน ชื่อสถานที่ ชื่อเส้นทาง ชื่อเซิร์ฟเวอร์ ชื่อพอร์ต โฮสต์ เส้นทางบริบท และค่าส่วนหัวทั้งหมดของสิ่งนั้น JSP.
การตอบสนองของเซิร์ฟเวอร์ JSP
- เมื่อมีการประมวลผลคำขอแล้วการตอบสนองจะถูกสร้างขึ้นจากเว็บเซิร์ฟเวอร์ ประกอบด้วยบรรทัดสถานะ ส่วนหัวการตอบกลับ บรรทัดว่าง และเอกสาร
- เป็นวัตถุของคลาส HTTPServletResponse ซึ่งเป็นวัตถุตอบสนอง
- บรรทัดสถานะเป็นเวอร์ชันของ HTML
ส่วนหัวการตอบกลับใน JSP
ส่วนหัวการตอบกลับใน JSP มีการกล่าวถึงด้านล่าง:
| ส่วนหัว | Descriptไอออน |
|---|---|
| อนุญาต | โดยระบุวิธีการร้องขอ เช่น GET, POST ที่เซิร์ฟเวอร์ร้องขอ |
| การควบคุมแคช | สามารถแคชเอกสารตอบกลับได้ อาจเป็นสาธารณะ ส่วนตัว และไม่มีแคช ไม่มีแคชระบุว่าเอกสารไม่ควรถูกแคช |
| การเชื่อมต่อ | โดยจะสั่งว่าเบราว์เซอร์ควรใช้ที่บันทึกไว้ HTTPConnections หรือไม่ ค่าปิดแสดงว่าเบราว์เซอร์ไม่ควรใช้แบบถาวรใน HTTPConnections และ "keep-alive" หมายถึงการใช้การเชื่อมต่อแบบถาวร |
| การจัดการเนื้อหา | เพื่อถามผู้ใช้ว่าจะบันทึกการตอบกลับลงดิสก์หรือไม่ |
| การเข้ารหัสเนื้อหา | หน้าจะต้องถูกเข้ารหัสระหว่างการส่ง |
| เนื้อหาความยาว | จำนวนไบต์ในการตอบกลับ |
| ชนิดของเนื้อหา | โดยจะระบุประเภทการตอบสนองแบบ MIME |
| วันที่หมดอายุ | ระบุจนถึงเวลาที่เนื้อหาควรได้รับการพิจารณาว่าล้าสมัยและไม่ควรแคช |
| ปรับเปลี่ยนครั้งล่าสุด | ระบุว่าเอกสารได้รับการแก้ไขครั้งล่าสุดเมื่อใด |
| สถานที่ | ควรรวมไว้กับการตอบกลับทั้งหมดที่มีรหัสสถานะคือ 300 เป็นรหัสสถานะ |
| รีเฟรช | ระบุวิธีการค้นหาหน้าที่อัปเดต |
| ลองอีกครั้งหลังจาก | สามารถใช้กับการตอบกลับ 503 เพื่อแจ้งให้ลูกค้าทราบว่าจะสามารถส่งคำขอซ้ำได้เร็วเพียงใด |
| ชุดคุกกี้ | ระบุคุกกี้ที่เกี่ยวข้องกับเพจ |
วิธีการส่วนหัวการตอบสนอง HTTP ใน JSP
ต่อไปนี้เป็นวิธีการใน JSP ที่ใช้การตอบสนองวัตถุ:
- สตริง encodeRedirectURL (URL สตริง) – เข้ารหัส URL ในเมธอด URL เปลี่ยนเส้นทาง
- สตริง encodeURL (URL สตริง) – เข้ารหัส URL โดยรวม ID เซสชัน
- บูลีนมีส่วนหัว (ชื่อสตริง) – มันมีส่วนหัวใน JSP หรือไม่
- บูลีน isCommited() – มีการตอบสนองหรือไม่
- Void addCookie(คุกกี้คุกกี้) – เพิ่มคุกกี้ในการตอบกลับ
- เป็นโมฆะ addDateHeader (ชื่อสตริง ค่าสตริง) – เพิ่มชื่อวันที่และค่าของส่วนหัวการตอบกลับ
- addHeader เป็นโมฆะ (ชื่อสตริง ค่าสตริง) – เพิ่มส่วนหัวการตอบกลับด้วยชื่อและค่า
- addIntHeader เป็นโมฆะ (ชื่อสตริง, ค่า int) – เพิ่มส่วนหัวการตอบกลับด้วยชื่อและค่าจำนวนเต็ม
- ล้างเป็นโมฆะBuffer() - บังคับเนื้อหาในบัฟเฟอร์ให้ส่งออกไปยังไคลเอนต์
- โมฆะรีเซ็ต() – ล้างข้อมูลในบัฟเฟอร์
- การรีเซ็ตเป็นโมฆะBuffer - ล้างบัฟเฟอร์เนื้อหาในการตอบสนองโดยไม่ต้องล้างรหัสสถานะ
- โมฆะ sendError (intsc, Stringmsg) – ส่งการตอบสนองข้อผิดพลาดไปยังไคลเอนต์โดยใช้รหัสสถานะ
- โมฆะ sendRedirect (ตำแหน่งสตริง) – ส่งการตอบสนองการเปลี่ยนเส้นทางชั่วคราวไปยังไคลเอนต์
- ชุดโมฆะBufferขนาด(int size) – กำหนดขนาดบัฟเฟอร์ของตัวเครื่อง
- โมฆะ setCharacterEncoding (ชุดอักขระสตริง) – ตั้งค่าการเข้ารหัสอักขระ
- เป็นโมฆะ setContentType (ประเภทสตริง) – กำหนดประเภทเนื้อหาของการตอบกลับ
- เป็นโมฆะ setContentLength (intlen) – กำหนดความยาวของเนื้อหาของการตอบกลับ
- เป็นโมฆะ setLocale (Locale lcl) – ตั้งค่าประเภทสถานที่ของการตอบกลับ
- เป็นโมฆะ setStatus (intsc) – ตั้งรหัสสถานะของการตอบกลับ
ตัวอย่าง:
ในตัวอย่างนี้ เราจะครอบคลุมวิธีต่างๆ ได้แก่ getLocale,flushbuffer, getWriter, get ContentType, setIntHeader
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.* java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Action Response</title>
</head>
<body>
<center>
<h2>Guru Response</h2>
<%
Locale lcl = response.getLocale();
out.println("Locale is : " + lcl + "\n");
response.flushBuffer();
PrintWriter output = response.getWriter();
output.println("This is from writer object");
String type = response.getContentType();
out.println("The content type : " + type + "\n");
// Set refresh,autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
//Get current time
Date dt = new Date();
out.println("Today's date is : " +dt.toString() + "\n");
%>
</center>
</body>
</html>
คำอธิบายของรหัส:
รหัสบรรทัด 13: การใช้อ็อบเจ็กต์การตอบสนอง เราได้รับอ็อบเจ็กต์โลแคลของเซสชัน JSP นี้
รหัสบรรทัด 15: การใช้การตอบสนองวัตถุ flushbuffer จะถูกใช้เพื่อบังคับเนื้อหาบัฟเฟอร์ลงในไคลเอนต์
รหัสบรรทัด 16: การใช้อ็อบเจ็กต์การตอบสนอง เราได้รับอ็อบเจ็กต์ตัวเขียนซึ่งรับเอาต์พุตในสตรีมเอาต์พุต
รหัสบรรทัด 18: การใช้วัตถุตอบสนอง เราได้รับประเภทเนื้อหา เช่น ประเภท MIME ของวัตถุตอบสนอง
รหัสบรรทัด 21: เมื่อใช้ออบเจ็กต์ตอบสนอง จะใช้โหลดอัตโนมัติทุกๆ 5 วินาที เนื่องจากตั้งค่า 5 เป็นพารามิเตอร์ตัวที่สอง
เมื่อคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ต่อไปนี้:
Output:
- ที่นี่เราได้รับเอาต์พุตเนื่องจากมาจากอ็อบเจ็กต์ตัวเขียนจาก getWriter ซึ่งให้อ็อบเจ็กต์แก่เราและเราสามารถส่งออกในสตรีมเอาต์พุตได้
- เราได้รับโลแคลเป็น en_us และประเภทเนื้อหาเป็น text/html
- เราได้รับชุดอักขระเป็น ISO 8859
- วันที่วันนี้เป็นวันที่ปัจจุบัน
รหัสสถานะ JSP HTTP
- เมื่อคำขอได้รับการประมวลผล การตอบสนองจะถูกสร้างขึ้น บรรทัดสถานะการตอบกลับประกอบด้วยเวอร์ชัน HTTP รหัสสถานะ และข้อความที่เกี่ยวข้อง
- ข้อความเชื่อมโยงโดยตรงกับรหัสสถานะและเวอร์ชัน HTTP และถูกกำหนดโดยเซิร์ฟเวอร์
- ตามค่าเริ่มต้น 200 จะถูกตั้งค่าเป็นรหัสสถานะใน JSP ดังนั้นเราจึงไม่จำเป็นต้องตั้งค่าอย่างชัดเจน
- เราสามารถตั้งค่าเป็นเมธอด response.setStatus() ได้
รหัสแบ่งออกเป็น 5 ประเภทดังต่อไปนี้:
- 100-199 – ที่นี่ไคลเอนต์ระบุว่าควรตอบสนองด้วยการดำเนินการบางอย่าง
- 200-299 – แสดงว่าคำขอสำเร็จ
- 300-399 – ใช้สำหรับไฟล์ที่ถูกย้ายและมักจะมีส่วนหัวของตำแหน่งที่ระบุที่อยู่ใหม่
- 400-499 – ระบุข้อผิดพลาดโดยไคลเอ็นต์
- 500-599 – ระบุข้อผิดพลาดโดยเซิร์ฟเวอร์
รหัสสถานะทั่วไปบางส่วนอยู่ด้านล่าง:
- 200 – บ่งบอกว่าทุกอย่างเรียบร้อยดี
- 301 – มันถูกย้ายอย่างถาวร
- 304 – ไม่มีการแก้ไขตั้งแต่การเปลี่ยนแปลงครั้งล่าสุด
- 400 – คำขอไม่ถูกต้อง
- 404 – ไม่พบ
- 405 – ไม่พบวิธีการ
- 500 - เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์
- 503 – บริการไม่พร้อมใช้งาน
- 505 – ไม่รองรับเวอร์ชัน HTTP
วิธีรหัสสถานะ HTTP ใน JSP
วิธีรหัสสถานะบางวิธีใน JSP มีดังต่อไปนี้:
- setStatus โมฆะสาธารณะ (intstatusCode): มันจะกำหนดรหัสสถานะที่เราต้องการจะตั้งค่าในหน้า JSP นั้น ซึ่งจะให้ข้อความของรหัสสถานะที่ถูกกำหนดไว้แก่เรา
- โมฆะสาธารณะ sendRedirect (URL สตริง): สร้างการตอบสนอง 302 พร้อมส่วนหัวตำแหน่งที่ระบุ URL ของเอกสารใหม่
- sendError เป็นโมฆะสาธารณะ (intcode, Stringmsg): โดยจะส่งรหัสสถานะพร้อมกับข้อความสั้นและจัดรูปแบบภายในเอกสาร HTML
ตัวอย่าง:
ในตัวอย่างนี้ เรากำลังส่งข้อผิดพลาดไปยังเพจ JSP อย่างชัดเจน
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Status Code</title> </head> <body> <% response.sendError(404,"Guru Page Not Found"); %> </body> </html>
คำอธิบายของรหัส:
รหัสบรรทัด 10: การใช้วัตถุตอบสนองเรากำลังส่งข้อผิดพลาดไปยังเพจที่มีพารามิเตอร์สองตัว
- รหัสสถานะ – อาจเป็นรหัสใดก็ได้ข้างต้น ในกรณีนี้ เราได้อธิบายไว้เป็น 404
- ข้อความ – อาจเป็นข้อความเฉพาะใดๆ ที่เราต้องการแสดงข้อผิดพลาด
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้:
Output:
ที่นี่เราได้รับรหัสข้อผิดพลาดเป็น 404 ซึ่งส่งมาจากรหัสและยังแสดงข้อความ "ไม่พบหน้า Guru" ที่เห็นในผลลัพธ์
สรุป
- ในบทความนี้ เราได้เรียนรู้เกี่ยวกับคำขอของไคลเอ็นต์และการตอบสนองของเซิร์ฟเวอร์เกี่ยวกับวิธีการดักฟังคำขอและวิธีจัดการกับการตอบสนอง
- การดำเนินการของ JSP ซึ่งใช้โครงสร้างในรูปแบบ XML เพื่อควบคุมพฤติกรรมของเอ็นจิ้นเซิร์ฟเล็ต
- เมื่อมีการร้องขอหน้าเว็บ มันจะส่งข้อมูลไปยังเว็บเซิร์ฟเวอร์ในส่วนหัว HTTP
- เมื่อมีการประมวลผลคำขอแล้วการตอบสนองจะถูกสร้างขึ้นจากเว็บเซิร์ฟเวอร์ ประกอบด้วยบรรทัดสถานะ ส่วนหัวการตอบกลับ บรรทัดว่าง และเอกสาร
- เมื่อคำขอได้รับการประมวลผล การตอบสนองจะถูกสร้างขึ้น บรรทัดสถานะการตอบกลับประกอบด้วยเวอร์ชัน HTTP รหัสสถานะ และข้อความที่เกี่ยวข้อง



