บทความนี้แบ่งปันวงจรชีวิตและหลักการทำงานของ Servlet สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
วงจรชีวิตของ Servlet แบ่งออกเป็นสามขั้นตอน:
1. เรียกเมธอด init () ในขั้นตอนการเริ่มต้น
2. โทรหาวิธีการบริการ () เพื่อตอบสนองต่อขั้นตอนการร้องขอลูกค้า
3. วิธีการโทรทำลาย () ในขั้นตอนการเลิกจ้าง
ขั้นตอนการเริ่มต้น servlet:
ในช่วงเวลาต่อไปนี้คอนเทนเนอร์ servlet จะโหลด servlet:
1. เมื่อคอนเทนเนอร์ Servlet เริ่มต้น Servlets บางตัวจะถูกโหลดโดยอัตโนมัติ ในการใช้งานคุณจะต้องเพิ่มรหัสต่อไปนี้ระหว่าง <servlet> </servlet> ในไฟล์ web.xml:
<loadon-startup> 1 </loadon-startup>
2. หลังจากเริ่มคอนเทนเนอร์ servlet ไคลเอ็นต์จะส่งคำขอไปยัง servlet เป็นครั้งแรก
3. หลังจากอัปเดตไฟล์คลาส servlet แล้วโหลด servlet ใหม่
หลังจากโหลด servlet คอนเทนเนอร์ servlet จะสร้างอินสแตนซ์ servlet และเรียกใช้เมธอด init () ของ servlet สำหรับการเริ่มต้น วิธีการ init () เรียกเพียงหนึ่งครั้งตลอดชีวิตของ servlet
Servlets ทำงานอย่างไร:
ก่อนอื่นให้อธิบายกระบวนการรับและตอบสนองต่อคำขอของลูกค้าสั้น ๆ ก่อนอื่นลูกค้าส่งคำขอ Servlet เรียกใช้เมธอดบริการ () เพื่อตอบสนองต่อคำขอ สามารถมองเห็นได้ผ่านซอร์สโค้ด เมธอดบริการ () ตรงกับวิธีการร้องขอ เลือกที่จะเรียก DOGT, DOPOST และวิธีอื่น ๆ จากนั้นป้อนวิธีการที่สอดคล้องกันเพื่อเรียกใช้วิธีเลเยอร์โลจิคัลเพื่อรับรู้การตอบสนองต่อลูกค้า ไม่มีวิธีการเช่น doget, dopost ฯลฯ ในอินเตอร์เฟส servlet และ genericservlet วิธีการเหล่านี้ถูกกำหนดไว้ใน httpservlet แต่พวกเขาทั้งหมดส่งคืนข้อมูลข้อผิดพลาด ดังนั้นทุกครั้งที่เรากำหนด servlet เราจะต้องใช้วิธีการเช่น doget หรือ dopost
เซิร์ฟเล็ตที่กำหนดเองแต่ละตัวจะต้องใช้อินเทอร์เฟซ servlet มีการกำหนดห้าวิธีในอินเทอร์เฟซ servlet ซึ่งวิธีการที่สำคัญกว่าสามวิธีเกี่ยวข้องกับวงจรชีวิตของ servlet คือ init (), บริการ () และวิธีการทำลาย () ที่กล่าวถึงข้างต้น Genericservlet เป็นทั่วไปไม่เฉพาะเจาะจงกับโปรโตคอลใด ๆ servlet ซึ่งใช้อินเตอร์เฟส servlet Httpservlet สืบทอดมาจาก Genericservlet ดังนั้น Httpservlet จึงใช้อินเตอร์เฟส servlet ดังนั้นเมื่อเรากำหนด servlet เราจะต้องสืบทอด httpservlet เท่านั้น
อินเทอร์เฟซ servlet และ genericservlet ไม่เฉพาะเจาะจงกับโปรโตคอลใด ๆ ในขณะที่ httpservlet เป็นคลาสที่เฉพาะเจาะจงกับโปรโตคอล HTTP ดังนั้นวิธีการบริการ () จะถูกนำไปใช้ใน httpservlet และ servletrequest และ servletresponse ที่ร้องขอ
บริการโมฆะสาธารณะ (ServletRequest REQ, ServletResponse Res) พ่น ServleTexception, iOexception {คำขอ httpRequest; การตอบสนอง httpresponse; ลอง {req = (httprequest) คำขอ; res = (httpresponse) การตอบสนอง; } catch (classcastexception e) {โยน servletexception ใหม่ ("การตอบสนองคำขอไม่ใช่ HTTP"); } บริการ (คำขอ, การตอบกลับ);}ในที่สุดรหัสเรียกใช้วิธีการของ HTTPSERVLET (การร้องขอการตอบกลับ) จากนั้นเรียกใช้วิธี DOXXX ที่สอดคล้องกันตามคำขอเนื่องจากเมธอด DOXXX ในข้อมูลข้อผิดพลาด HTTPSERVLET
Void Doget ที่ได้รับการป้องกัน (httpservletrequest res, httpservletResponse resp) พ่น servletexception, ioexception {String protocol = req.getProtocol (); String msg = istrings.getString ("http.method_get_not_supported"); if (protocol.equals ("1.1")) {resp.senderror (httpservletResponse.sc.method.not.allowed, msg); } esle {resp.senderror (httpservletResponse.sc_bad_request, msg); -ดังนั้นเราจำเป็นต้องแทนที่วิธีเหล่านี้ใน servlet ที่กำหนดเอง!
ไม่มีความลับต่อหน้าซอร์สโค้ด!
ขั้นตอนการร้องขอการตอบกลับของ Servlet:
สำหรับคำขอของผู้ใช้ในการเข้าถึง servlet คอนเทนเนอร์ servlet จะสร้างวัตถุ ServletRequest และวัตถุ servletResponse เฉพาะสำหรับคำขอนี้จากนั้นเรียกใช้วิธีการบริการ servlet วิธีการบริการได้รับข้อมูลคำขอลูกค้าจากวัตถุ ServletRequest ประมวลผลคำขอและส่งคืนข้อมูลการตอบกลับไปยังลูกค้าผ่านวัตถุ ServletResponse
สำหรับ Tomcat มันจะวางพารามิเตอร์ที่ผ่านลงในแฮชแต้มและคำจำกัดความของแฮชแต้มคือ:
การคัดลอกรหัสมีดังนี้: hashtable ส่วนตัว <string string []> paramhashstringarray = new hashtable <string string []> ();
นี่คือแผนที่คีย์-ค่าของสตริง-> สตริง []
เธรด HashMap ไม่ปลอดภัยเธรด Hashtable นั้นปลอดภัย
ขั้นตอนการเลิกจ้าง servlet:
เมื่อเว็บแอปพลิเคชันถูกยกเลิกหรือคอนเทนเนอร์ servlet จะสิ้นสุดลงหรือการโหลดคอนเทนเนอร์ servlet โหลดอินสแตนซ์ใหม่ของ servlet คอนเทนเนอร์ servlet จะเรียกวิธีการทำลาย () ของ servlet ซึ่งสามารถปลดปล่อยทรัพยากรที่ถูกครอบครองโดยวิธีการทำลาย ()
เซิร์ฟเล็ตถูกสร้างขึ้นเมื่อใด:
1. โดยค่าเริ่มต้นเมื่อเว็บไคลเอนต์ร้องขอการเข้าถึง servlet เป็นครั้งแรกเว็บคอนเทนเนอร์จะสร้างอินสแตนซ์ของ servlet
2. เมื่อระบุองค์ประกอบของเด็ก <load-on-startup> ในองค์ประกอบ <servlet> ในไฟล์ web.xml คอนเทนเนอร์ servlet จะสร้างและเริ่มต้นวัตถุ servlet ตามลำดับเมื่อเริ่มต้นเว็บเซิร์ฟเวอร์
หมายเหตุ: ในไฟล์ web.xml บาง servlets มีองค์ประกอบ <serlvet> เท่านั้นและไม่มีองค์ประกอบ <servlet-mapping> ดังนั้นเราจึงไม่สามารถเข้าถึง servlets เหล่านี้ผ่าน URL servlet นี้มักจะกำหนดค่าองค์ประกอบเด็ก <load-on-startup> ในองค์ประกอบ <servlet> เพื่อให้คอนเทนเนอร์โหลด servlets เหล่านี้โดยอัตโนมัติและเรียกใช้เมธอด init () เมื่อเริ่มต้นเสร็จสิ้นการเริ่มต้นงานทั่วโลก
แอปพลิเคชันเว็บจะเริ่มเมื่อใด:
1. เมื่อคอนเทนเนอร์ Servlet เริ่มต้นขึ้นเว็บแอปพลิเคชันทั้งหมดจะเริ่มต้นขึ้น
2. คอนโทรลเลอร์เริ่มต้นแอปพลิเคชันเว็บ
การเปรียบเทียบระหว่าง servlet และ jsp:
มีความคล้ายคลึงกันมากมายที่สามารถสร้างหน้าเว็บแบบไดนามิก
ข้อได้เปรียบของ JSP คือการผลิตเว็บเพจนั้นดีและเป็นเรื่องง่ายกว่าในการสร้างหน้าแบบไดนามิก แต่ข้อเสียคือมันไม่ง่ายที่จะติดตามและแก้ไขปัญหา
Servlet เป็นภาษาชวาบริสุทธิ์และเก่งในการประมวลผลกระบวนการและตรรกะทางธุรกิจ ข้อเสียคือมันไม่ง่ายที่จะสร้างหน้าเว็บแบบไดนามิก
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น