ฟังก์ชั่นหลักของ servlet คือการประมวลผลคำขอไคลเอนต์และตอบกลับ ด้วยเหตุผลนี้สำหรับแต่ละคำขอเว็บคอนเทนเนอร์จะสร้างวัตถุสองวัตถุก่อนที่จะเรียกบริการ () คือ HttpservletRequest และ HttpservletResponse ในกรณีที่ httpservletrequest ห่อหุ้มข้อความคำขอ http httpservletresponse ห่อหุ้มข้อความตอบกลับ HTTP ควรสังเกตว่าในระหว่างการทำงานของเว็บเซิร์ฟเวอร์แต่ละเซิร์ฟเวอร์จะสร้างวัตถุอินสแตนซ์เดียวเท่านั้น แต่ทุกคำขอจะเรียกใช้บริการ (ServletRequest REQ, วิธีการ res ของ ServletResponse) ของอินสแตนซ์ servlet ที่นี่ httpservletrequest เป็นคลาสย่อยของ servletrequest และ httpservletresponse เป็นคลาสย่อยของ servletresponse
ไดอะแกรมความสัมพันธ์ในการสืบทอดของอินเตอร์เฟส HttpServletRequest และ HttpServletResponse มีดังนี้:
1. httpservletResponse
อินเทอร์เฟซ HTTPSERVLETRESSENSE สืบทอดมาจากอินเตอร์เฟส servletResponse เนื่องจากข้อความตอบกลับ HTTP ถูกแบ่งออกเป็นสามส่วน: แถวสถานะ, เนื้อหาข้อความตอบกลับและตัวข้อความ, อินเตอร์เฟส HTTPSERVLETRESSESSONSE จะกำหนดวิธีการส่งรหัสสถานะการตอบกลับส่วนหัวข้อความตอบกลับและข้อความตอบกลับไปยังไคลเอนต์ แม้ว่าจะมีวิธีการมากมายในอินเทอร์เฟซ HTTPSERVLETRESSESSONSE แต่เราใช้วิธีที่ใช้กันทั่วไปเพียงไม่กี่อย่างเท่านั้น หากคุณใช้วิธีการอื่นคุณสามารถอ่านซอร์สโค้ดหรือข้อมูลที่เกี่ยวข้องของการตอบกลับ
ส่งรหัสสถานะฟังก์ชั่นที่เกี่ยวข้อง
วิธี การคำอธิบาย โมฆะสาธารณะ setstatus (int sc) ตั้งรหัสสถานะสำหรับข้อความตอบกลับ เว็บเซิร์ฟเวอร์สร้างบรรทัดสถานะด้วยรหัสสถานะ 200 โดยค่าเริ่มต้น โมฆะสาธารณะ SENDERROR (Int SC) ส่งรหัสสถานะระบุข้อความแสดงข้อผิดพลาด วิธีที่สองยังเพิ่มข้อความสำหรับการแจ้งคำอธิบาย โมฆะสาธารณะ senderror (int sc, string msg)
ส่งฟังก์ชั่นส่วนหัวข้อความตอบกลับฟังก์ชั่นที่เกี่ยวข้อง
วิธี การคำอธิบายโมฆะ สาธารณะ addheader (ชื่อสตริง, ค่าสตริง) ตั้งค่าฟิลด์ส่วนหัวการตอบกลับ HTTP ชื่อระบุชื่อฟิลด์และค่าระบุค่าฟิลด์ Addheader สามารถเพิ่มฟิลด์ส่วนหัวตอบกลับด้วยชื่อเดียวกัน Setheader จะแทนที่ฟิลด์ส่วนหัวด้วยชื่อเดียวกันกับ โมฆะสาธารณะ Setheader (ชื่อสตริง, ค่าสตริง) โมฆะสาธารณะ setContentLength ( int len) ตั้งค่าขนาดของเนื้อหาของการตอบสนอง เนื้อหานั่นคือตั้งค่าของฟิลด์ประเภทเนื้อหา โมฆะ public setCharacterencoding (สตริง charset) ตั้งค่าการเข้ารหัสอักขระเนื้อหาเอาต์พุตนั่นคือตั้งค่าค่าของฟิลด์ประเภทเนื้อหา โปรดทราบว่าลำดับความสำคัญของวิธีนี้สูงกว่าของ setContentType public public void sendretirect (ตำแหน่งสตริง) การเปลี่ยนเส้นทางการเปลี่ยนเส้นทาง
ส่งฟังก์ชั่นที่เกี่ยวข้องกับร่างกายข้อความตอบกลับ
| วิธี | อธิบาย |
| public ServleToutputStream getOutputStream () | รับสตรีมเอาท์พุทไบต์ของประเภท httpservletResponse servletoutputstram |
| Public Printwriter GetWriter () | รับสตรีมเอาท์พุทอักขระประเภท servletwriter ของ httpservletResponse |
ปัญหาที่อ่านไม่ออกของจีน
ข้อมูลในคอมพิวเตอร์จะถูกเก็บไว้ในรูปแบบไบนารีดังนั้นเมื่อมีการถ่ายโอนข้อความการแปลงระหว่างไบต์ของอักขระจะเกิดขึ้น การแปลงระหว่างอักขระและไบต์เสร็จสิ้นผ่านตารางการค้นหารหัส กระบวนการแปลงอักขระเป็นไบต์เรียกว่าการเข้ารหัสและกระบวนการแปลงไบต์เป็นอักขระเรียกว่าการถอดรหัส หากตารางรหัสที่ใช้สำหรับการเข้ารหัสและการถอดรหัสนั้นแตกต่างกันปัญหารหัสที่อ่านไม่ออกจะเกิดขึ้น
หมายเหตุ: เมื่อเข้ารหัสสตรีมเอาท์พุทอักขระของวัตถุ HTTPSERVLETRESSSESSENS ค่าเริ่มต้นคือการเข้ารหัส ISO 8859-1 วิธีการเข้ารหัสนี้เข้ากันไม่ได้กับภาษาจีน ตัวอย่างเช่น "จีน" จะถูกเข้ารหัสเป็น "63 63" (อักขระที่ไม่สามารถพบได้ในตารางรหัส ISO 8959-1 จะแสดง 63) เมื่อเบราว์เซอร์ถอดรหัสข้อมูลที่ได้รับมันจะใช้ GB2312 โดยค่าเริ่มต้นถอดรหัส "63" เป็น "?" และเบราว์เซอร์จะถอดรหัสตัวละครทั้งสอง "จีน" ถึง "??"
ตัวอย่างโปรแกรม httpServleSponse
แพ็คเกจ zzz; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.https doGet (httpservletrequest Request, httpservletResponse Response) พ่น IOException {// ตั้งค่าการเข้ารหัสข้อความตอบกลับหลังจากแสดงความคิดเห็น "จีน", "การตอบกลับที่อ่านไม่ออก SetContentType (" ข้อความ/html; DOPOST (HTTPSERVLETREQUEST Request, HttpServletResponse Response) พ่น IOException {this.doget (คำขอ, การตอบสนอง);บางครั้งคุณจะพบปัญหาการกระโดดหน้าเป็นประจำ ฟิลด์ส่วนหัวรีเฟรชใน HTTP สามารถแจ้งเบราว์เซอร์ให้รีเฟรชและข้ามไปยังหน้าอื่น ๆ ภายในเวลาที่กำหนดโดยอัตโนมัติและหน้าเว็บจะรีเฟรชและข้ามไปยังหน้าระบุเป็นประจำ
แพ็คเกจ zzz; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.https DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น IOException {// ตั้งค่าการตอบกลับการเข้ารหัสข้อความตอบกลับ SetContentType ("text/html; charset = utf-8"); Response.Setheader ("Refresh", "2; url = http: //www.baidu.com"); PrintWriter out = response.getWriter (); out.println ("สวัสดีจีนข้ามไปที่ Baidu ใน 2 วินาที ... "); } @Override โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น IOException {this.doget (คำขอ, การตอบกลับ); -2. httpservletrequest
อินเทอร์เฟซ HTTPSERVLETREQUEST สืบทอดอินเตอร์เฟส servletRequest และใช้เป็นพิเศษสำหรับข้อความคำขอ HTTP ที่ห่อหุ้ม เนื่องจากข้อมูลการร้องขอ HTTP มีสามส่วน: สายคำขอส่วนหัวคำขอและตัวตนคำขอ HTTPSERVLETREQUEST จะกำหนดวิธีการที่เกี่ยวข้องสำหรับการรับสายคำขอส่วนหัวคำขอและตัวตนขอ
วิธีการที่เกี่ยวข้องสำหรับการได้รับแถวคำขอ
| วิธี | อธิบาย |
| สตริงสาธารณะ getMethod () | รับวิธีการขอ http, โพสต์, รับ ฯลฯ |
| สตริงสาธารณะ getRequesturi () | รับส่วนชื่อทรัพยากรในบรรทัดคำขอ |
| สตริงสาธารณะ getQueryString () | รับส่วนพารามิเตอร์ในบรรทัดคำขอ |
| สตริงสาธารณะ getProtocol () | รับชื่อโปรโตคอลและเวอร์ชันในบรรทัดคำขอเช่น HTTP 1.1 |
| สตริงสาธารณะ getContextPath () | รับเส้นทางที่เป็นของเว็บแอปพลิเคชันใน URL คำขอ |
อันที่จริงวิธีการของสายคำขอสามารถมองเห็นได้จากชื่อวิธีดังนั้นฉันจะไม่โพสต์ทีละรายการที่นี่
วิธีการที่เกี่ยวข้องสำหรับการรับส่วนหัวข้อความคำขอ
| วิธี | อธิบาย |
| สตริงสาธารณะ Getheader (ชื่อสตริง) | รับค่าของฟิลด์ที่ระบุหากไม่มีการส่งคืนค่า null หากมีการส่งคืนหลายค่าแรก |
| การแจงนับสาธารณะ <String> Getheaders (ชื่อสตริง) | ส่งคืนวัตถุรวบรวมการแจงนับด้วยฟิลด์ที่ระบุ |
| การแจงนับสาธารณะ <String> GetheaderNames () | ส่งคืนวัตถุการรวบรวมการแจงนับที่มีฟิลด์ทั้งหมด |
| สตริงสาธารณะ getContentType () | รับค่าของฟิลด์ประเภทเนื้อหา |
พิมพ์ค่าทั้งหมดของฟิลด์ส่วนหัวคำขอ
แพ็คเกจ zzz; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.enumeration; นำเข้า javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletRequest; httpservlet {@Override โมฆะสาธารณะ DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น IOException {// ตั้งค่าข้อความตอบกลับการเข้ารหัสข้อความตอบกลับ PrintWriter out = response.getWriter (); การแจงนับ <String> ชื่อ = request.getheaderNames (); ในขณะที่ (names.hasmoreElements ()) {string name = names.nextElement (); ค่าสตริง = request.getheader (ชื่อ); out.println (ชื่อ + ":" + value + "</br>"); }} @Override โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น IOException {this.doget (คำขอ, การตอบกลับ); -วิธีการที่เกี่ยวข้องสำหรับการได้รับร่างกายคำขอ
วิธี การคำอธิบาย สาธารณะ servletInputStream getInputStream () ได้รับวัตถุ ServletInputStream ที่ร้องขอ หากเนื้อหาเอนทิตีไม่ใช่ข้อความคุณสามารถรับเนื้อหาข้อความร้องขอได้ผ่านวิธี GetInputStream เท่านั้น BufferedReader GetReader () ที่ร้องขอจะได้รับวัตถุ BufferedReader ที่ร้องขอ วัตถุนี้จะแปลงข้อมูลไบต์เนื้อหาเอนทิตีเป็นสตริงข้อความที่เข้ารหัสโดยชุดอักขระที่ระบุ
รับพารามิเตอร์คำขอ
| วิธี | อธิบาย |
| สตริงสาธารณะ getParameter (ชื่อสตริง) | รับค่าพารามิเตอร์ที่ระบุและส่งคืนค่า null โดยไม่มีพารามิเตอร์นี้ |
| การแจงนับสาธารณะ <String> getParameterNames () | ส่งคืนวัตถุการแจงนับที่มีชื่อพารามิเตอร์ทั้งหมด |
| สตริงสาธารณะ [] getParameterValues (ชื่อสตริง) | อาจมีพารามิเตอร์เดียวกันหลายตัวในคำขอ HTTP เพื่อรับค่าพารามิเตอร์ทั้งหมดที่สอดคล้องกับชื่อพารามิเตอร์เดียวกัน |
3. อินเทอร์เฟซ RequestDispatcher
เมื่อไคลเอ็นต์ขอทรัพยากรเว็บหากคุณต้องการให้เซิร์ฟเวอร์แจ้งทรัพยากรอื่นเช่นการประมวลผลคำขอนอกเหนือจากการใช้ฟังก์ชัน SENDREDIRECT () เพื่อใช้การเปลี่ยนเส้นทางก็สามารถนำไปใช้ได้ผ่านวัตถุอินสแตนซ์ของอินเทอร์เฟซ RequestDispatcher วิธีการรับวัตถุ RequestDispatcher ถูกกำหนดไว้ในอินเตอร์เฟส servletRequest - getRequestDispatcher (เส้นทางสตริง) ซึ่งส่งคืนวัตถุ RequestDispatcher ของทรัพยากรที่ระบุโดยเส้นทางที่แน่นอน พา ธ พารามิเตอร์จะต้องเริ่มต้นด้วย "/" เพื่อแสดงไดเรกทอรีรูทของเว็บแอปพลิเคชันปัจจุบันนั่นคือเส้นทางพา ธ จะต้องอยู่ในโปรแกรมเว็บนี้มิฉะนั้นจะมีข้อยกเว้นเกิดขึ้น
วิธีการในอินเทอร์เฟซ RequestDispatcher
| วิธี | การทำงาน |
| โมฆะสาธารณะไปข้างหน้า (คำขอ servletrequest, การตอบสนอง servletresponse) | ส่งผ่าน servlet ไปยังแหล่งข้อมูลเว็บอื่นและส่งคำขอไปยังแหล่งข้อมูลอื่นสำหรับการตอบกลับ |
| โมฆะสาธารณะรวมถึง (คำขอ ServletRequest, การตอบสนอง servletResponse) | ใช้เพื่อรวมทรัพยากรอื่น ๆ เป็นเนื้อหาการตอบสนองปัจจุบัน |
ข้างต้นเป็นคำอธิบายโดยละเอียดของการร้องขอเว็บ Java และตัวอย่างการตอบกลับที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!