Servlets - รหัสสถานะ Http
รูปแบบของคำขอ HTTP และข้อความตอบกลับ HTTP จะคล้ายกันและจะมีโครงสร้างดังนี้ -
บรรทัดสถานะเริ่มต้น + CRLF (Carriage Return + Line Feed เช่น New Line)
เส้นส่วนหัวเป็นศูนย์หรือมากกว่า + CRLF
บรรทัดว่างคือ CRLF
เนื้อหาข้อความที่เป็นทางเลือกเช่นไฟล์ข้อมูลคิวรีหรือเอาต์พุตคิวรี
ตัวอย่างเช่นส่วนหัวการตอบกลับของเซิร์ฟเวอร์มีลักษณะดังนี้ -
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
บรรทัดสถานะประกอบด้วยเวอร์ชัน HTTP (HTTP / 1.1 ในตัวอย่าง) รหัสสถานะ (200 ในตัวอย่าง) และข้อความสั้น ๆ ที่สอดคล้องกับรหัสสถานะ (ตกลงในตัวอย่าง)
ต่อไปนี้เป็นรายการรหัสสถานะ HTTP และข้อความที่เกี่ยวข้องซึ่งอาจส่งคืนจากเว็บเซิร์ฟเวอร์ -
รหัส | ข้อความ | คำอธิบาย |
---|---|---|
100 | ดำเนินการต่อ | เซิร์ฟเวอร์ได้รับคำขอเพียงบางส่วนเท่านั้น แต่ตราบใดที่ยังไม่ถูกปฏิเสธไคลเอ็นต์ควรดำเนินการตามคำขอต่อไป |
101 | การสลับโปรโตคอล | เซิร์ฟเวอร์สลับโปรโตคอล |
200 | ตกลง | คำขอก็โอเค |
201 | สร้าง | คำขอเสร็จสมบูรณ์และมีการสร้างทรัพยากรใหม่ |
202 | ได้รับการยอมรับ | คำขอได้รับการยอมรับสำหรับการประมวลผล แต่การประมวลผลยังไม่สมบูรณ์ |
203 | ข้อมูลที่ไม่น่าเชื่อถือ | |
204 | ไม่มีเนื้อหา | |
205 | รีเซ็ตเนื้อหา | |
206 | เนื้อหาบางส่วน | |
300 | หลายทางเลือก | ลิงค์ลิสต์ ผู้ใช้สามารถเลือกลิงค์และไปที่ตำแหน่งนั้นได้ สูงสุดห้าที่อยู่ |
301 | ย้ายถาวร | หน้าที่ร้องขอได้ย้ายไปยัง URL ใหม่ |
302 | พบ | หน้าที่ร้องขอได้ย้ายไปยัง URL ใหม่ชั่วคราว |
303 | ดูอื่น ๆ | หน้าที่ร้องขอสามารถพบได้ภายใต้ URL อื่น |
304 | ไม่ได้แก้ไข | |
305 | ใช้ Proxy | |
306 | ไม่ได้ใช้ | รหัสนี้ถูกใช้ในเวอร์ชันก่อนหน้า ไม่มีการใช้งานอีกต่อไป แต่สงวนรหัสไว้ |
307 | เปลี่ยนเส้นทางชั่วคราว | หน้าที่ร้องขอได้ย้ายไปยัง URL ใหม่ชั่วคราว |
400 | คำขอไม่ถูกต้อง | เซิร์ฟเวอร์ไม่เข้าใจคำขอ |
401 | ไม่ได้รับอนุญาต | หน้าที่ร้องขอต้องมีชื่อผู้ใช้และรหัสผ่าน |
402 | ต้องชำระเงิน | คุณยังใช้รหัสนี้ไม่ได้ |
403 | ต้องห้าม | ไม่อนุญาตให้เข้าถึงหน้าที่ร้องขอ |
404 | ไม่พบ | เซิร์ฟเวอร์ไม่พบหน้าที่ร้องขอ |
405 | วิธีการไม่ได้รับอนุญาต | ไม่อนุญาตวิธีการที่ระบุในคำขอ |
406 | ไม่ยอมรับ | เซิร์ฟเวอร์สามารถสร้างการตอบสนองที่ไคลเอนต์ไม่ยอมรับเท่านั้น |
407 | จำเป็นต้องมีการตรวจสอบสิทธิ์พร็อกซี | คุณต้องพิสูจน์ตัวตนกับพร็อกซีเซิร์ฟเวอร์ก่อนจึงจะสามารถให้บริการได้ |
408 | หมดเวลาการร้องขอ | คำขอใช้เวลานานกว่าที่เซิร์ฟเวอร์จะเตรียมรอ |
409 | ขัดแย้ง | ไม่สามารถดำเนินการตามคำขอได้เนื่องจากมีข้อขัดแย้ง |
410 | ที่ไปแล้ว | หน้าที่ร้องขอไม่สามารถใช้ได้อีกต่อไป |
411 | ความยาวที่ต้องการ | ไม่ได้กำหนด "ความยาวของเนื้อหา" เซิร์ฟเวอร์จะไม่ยอมรับคำขอหากไม่มีมัน |
412 | เงื่อนไขเบื้องต้นล้มเหลว | เงื่อนไขเบื้องต้นที่กำหนดในคำขอที่เซิร์ฟเวอร์ประเมินเป็นเท็จ |
413 | ขอเอนทิตีใหญ่เกินไป | เซิร์ฟเวอร์จะไม่ยอมรับคำขอเนื่องจากเอนทิตีคำขอมีขนาดใหญ่เกินไป |
414 | Request-url ยาวเกินไป | เซิร์ฟเวอร์จะไม่ยอมรับคำขอเนื่องจาก url ยาวเกินไป เกิดขึ้นเมื่อคุณแปลงคำขอ "โพสต์" เป็นคำขอ "รับ" ด้วยข้อมูลการสืบค้นแบบยาว |
415 | ประเภทสื่อที่ไม่รองรับ | เซิร์ฟเวอร์จะไม่ยอมรับคำขอเนื่องจากไม่รองรับประเภทสื่อ |
417 | ความคาดหวังล้มเหลว | |
500 | ข้อผิดพลาดภายในเซิร์ฟเวอร์ | คำขอไม่เสร็จสมบูรณ์ เซิร์ฟเวอร์พบเงื่อนไขที่ไม่คาดคิด |
501 | ไม่ได้ดำเนินการ | คำขอไม่เสร็จสมบูรณ์ เซิร์ฟเวอร์ไม่รองรับฟังก์ชันที่จำเป็น |
502 | เกตเวย์ไม่ดี | คำขอไม่เสร็จสมบูรณ์ เซิร์ฟเวอร์ได้รับการตอบสนองที่ไม่ถูกต้องจากเซิร์ฟเวอร์ต้นน้ำ |
503 | ไม่สามารถให้บริการได้ | คำขอไม่เสร็จสมบูรณ์ เซิร์ฟเวอร์ทำงานเกินหรือหยุดทำงานชั่วคราว |
504 | หมดเวลาเกตเวย์ | เกตเวย์หมดเวลาแล้ว |
505 | ไม่รองรับเวอร์ชัน HTTP | เซิร์ฟเวอร์ไม่รองรับเวอร์ชัน "โปรโตคอล http" |
วิธีการตั้งรหัสสถานะ HTTP
สามารถใช้วิธีการต่อไปนี้เพื่อตั้งรหัสสถานะ HTTP ในโปรแกรม servlet ของคุณ วิธีการเหล่านี้ใช้ได้กับอ็อบเจ็กต์HttpServletResponse
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | public void setStatus ( int statusCode ) วิธีนี้ตั้งรหัสสถานะโดยพลการ เมธอด setStatus ใช้ int (รหัสสถานะ) เป็นอาร์กิวเมนต์ ถ้าคำตอบของคุณรวมถึงรหัสสถานะพิเศษและเอกสารให้แน่ใจว่าจะเรียก SetStatus ก่อนที่จริงกลับมาของเนื้อหาใด ๆ ที่มีPrintWriter |
2 | public void sendRedirect(String url) วิธีนี้สร้างการตอบกลับ 302 พร้อมกับส่วนหัวตำแหน่งที่ให้ URL ของเอกสารใหม่ |
3 | public void sendError(int code, String message) วิธีนี้จะส่งรหัสสถานะ (โดยปกติคือ 404) พร้อมกับข้อความสั้น ๆ ที่จัดรูปแบบโดยอัตโนมัติภายในเอกสาร HTML และส่งไปยังไคลเอนต์ |
ตัวอย่างรหัสสถานะ HTTP
ต่อไปนี้เป็นตัวอย่างที่จะส่งรหัสข้อผิดพลาด 407 ไปยังเบราว์เซอร์ไคลเอนต์และเบราว์เซอร์จะแสดงข้อความ "ต้องการการตรวจสอบสิทธิ์ !!!" ข้อความ.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
ตอนนี้การเรียกใช้ servlet ด้านบนจะแสดงผลลัพธ์ต่อไปนี้ -
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29