ความแตกต่างและการเชื่อมต่อระหว่าง servlets, ตัวกรอง, ผู้ฟัง, interceptors
1. แนวคิด
1.Servlet: Servlet เป็นแอปพลิเคชัน Java ที่ใช้งานด้านเซิร์ฟเวอร์โดยมีแพลตฟอร์มและคุณสมบัติที่ไม่ขึ้นกับโปรโตคอลและสามารถสร้างเว็บเพจแบบไดนามิกซึ่งทำงานในเลเยอร์กลางระหว่างคำขอไคลเอนต์และการตอบสนองของเซิร์ฟเวอร์
2. ฟิลเตอร์: ตัวกรองเป็นตัวอย่างโค้ดที่ใช้ซ้ำได้ซึ่งสามารถใช้ในการแปลงคำขอ HTTP การตอบสนองและข้อมูลส่วนหัว ตัวกรองไม่เหมือน servlet ไม่สามารถสร้างคำขอหรือการตอบกลับได้ เพียงแค่ปรับเปลี่ยนคำขอไปยังทรัพยากรบางอย่างหรือแก้ไขการตอบสนองจากทรัพยากรบางอย่าง
3. ผู้ฟัง: ผู้ฟังอย่างแท้จริงจะเห็นได้ว่าผู้ฟังส่วนใหญ่ใช้สำหรับการฟังเท่านั้น ผ่านผู้ฟังคุณสามารถฟังการดำเนินการดำเนินการในเว็บเซิร์ฟเวอร์และทำการตอบกลับที่สอดคล้องกันตามข้อกำหนดของมัน
ในแง่ง่ายมันเป็นส่วนประกอบที่ใช้งานได้ซึ่งจะเรียกใช้งานรหัสโดยอัตโนมัติเมื่อวัตถุทั้งสามของแอปพลิเคชันเซสชันและคำขอถูกสร้างขึ้นหรือเมื่อมีการเพิ่มแอตทริบิวต์การปรับเปลี่ยนและการกำจัด
4.interceptor: มันคือการเขียนโปรแกรมในการวางแนวสัมผัสซึ่งคือการเรียกวิธีการก่อนที่บริการหรือวิธีการของคุณหรือเรียกวิธีการตามวิธีการ
ตัวอย่างเช่นพร็อกซีแบบไดนามิกเป็นการใช้งานง่าย ๆ ของการดักจับ คุณสามารถพิมพ์สตริงก่อนที่คุณจะเรียกวิธีการ (หรือทำการดำเนินการตรรกะทางธุรกิจอื่น ๆ ) คุณยังสามารถพิมพ์สตริงได้หลังจากที่คุณเรียกวิธีการหรือแม้แต่การดำเนินการทางธุรกิจเมื่อคุณทำข้อยกเว้น
5. servlet, ตัวกรอง, ผู้ฟังถูกกำหนดค่าเป็น web.xml, interceptor ไม่ได้กำหนดค่าเป็น web.xml, struts interceptor ถูกกำหนดค่าเป็น struts.xml Interceptor สำหรับสปริงถูกกำหนดค่าเป็น Spring.xml
2. คำสั่งโหลด
ลำดับการโหลดของ web.xml คือ: บริบท -พาราม -> ฟัง -> ตัวกรอง -> servlet
3. ความรับผิดชอบ
1.Servlet:
(1) สร้างและส่งคืนหน้า HTML ที่สมบูรณ์ซึ่งมีเนื้อหาแบบไดนามิกตามลักษณะของคำขอไคลเอนต์
(2) สร้างส่วนหนึ่งของหน้า HTML (แฟรกเมนต์ HTML) ที่สามารถฝังอยู่ในหน้า HTML ที่มีอยู่
(3) อ่านข้อมูลที่ซ่อนอยู่โดยลูกค้า
(4) อ่านข้อมูลการแสดงผลที่ส่งโดยไคลเอนต์
(5) สื่อสารกับทรัพยากรเซิร์ฟเวอร์อื่น ๆ (รวมถึงฐานข้อมูลและแอปพลิเคชัน Java)
(6) ส่งข้อมูลที่ซ่อนอยู่ไปยังไคลเอนต์ผ่านรหัสสถานะและส่วนหัวการตอบกลับ
2. ฟิลเตอร์:
(1) ตัวกรองสามารถประมวลผลคำขอของผู้ใช้ล่วงหน้าก่อนที่คำขอจะถึง servlet หรือยังสามารถประมวลผลการตอบกลับ HTTP เมื่อออกจาก servlet
(2) ก่อนที่จะดำเนินการ servlet ให้ดำเนินการโปรแกรมตัวกรองก่อนและทำงานก่อนการประมวลผลล่วงหน้า
(3) แก้ไขคำขอและการตอบสนองตามความต้องการของโปรแกรม
(4) สกัดกั้นการดำเนินการของ servlet หลังจาก servlet ถูกเรียก
3.Listener:
8 อินเทอร์เฟซผู้ฟังมีให้ในข้อกำหนด servlet2.4 ซึ่งสามารถแบ่งออกเป็นสามหมวดหมู่ดังนี้:
(1) อินเตอร์เฟส Listne R ที่เกี่ยวข้องกับ ServletContext รวมถึง: servletContextListener, servletContextattributelistener
(2) อินเทอร์เฟซ Listner ที่เกี่ยวข้องกับ httpsession รวมถึง: httpsessionListner, httpsessionattributelistener, httpsessionbindinglistener, httpsessionactivationListener
(3) อินเทอร์เฟซฟังที่เกี่ยวข้องกับ ServletRequest รวมถึง: ServletRequestListner, ServletRequestattributeListener
4. ความแตกต่าง
1.Servlet: กระบวนการ servlet สั้น หลังจากส่ง URL แล้วจะถูกประมวลผลแล้วส่งคืนหรือหันไปหาหน้าเว็บที่คุณระบุ ส่วนใหญ่จะใช้ในการควบคุมก่อนการดำเนินธุรกิจ
2. ฟิลเตอร์: กระบวนการถูกเกลียว หลังจากส่ง URL หลังจากตรวจสอบกระบวนการดั้งเดิมสามารถเก็บลงและได้รับจากตัวกรองถัดไป servlet ฯลฯ และหลังจากการประมวลผล servlet มันจะไม่ถูกส่งต่อไป
ฟังก์ชั่นตัวกรองสามารถใช้เพื่อให้กระบวนการดำเนินไปในแบบดั้งเดิมหรือเพื่อครอบงำกระบวนการในขณะที่ฟังก์ชัน servlet ส่วนใหญ่จะใช้เพื่อครอบงำกระบวนการ ตัวกรองถือได้ว่าเป็นส่วนเสริมของ servlet (เช็ดอ่อน)
ตัวกรองถือได้ว่าเป็น "ตัวแปร" ของ servlet ส่วนใหญ่จะใช้ในการประมวลผลคำขอของผู้ใช้ล่วงหน้าและยังสามารถโพสต์ httpservletResponse ได้ มันเป็นห่วงโซ่การประมวลผลทั่วไป
ความแตกต่างระหว่างมันและ servlet คือมันไม่สามารถสร้างการตอบสนองโดยตรงกับผู้ใช้
กระบวนการที่สมบูรณ์คือ: ตัวกรองการประมวลผลล่วงหน้าของผู้ใช้จากนั้นส่งคำขอไปยัง servlet สำหรับการประมวลผลและสร้างการตอบกลับและในที่สุดกรองหลังประมวลผลการตอบสนองของเซิร์ฟเวอร์
3. กฎการจับคู่
เมื่อคำขอถูกส่งไปยังคอนเทนเนอร์ Servlet คอนเทนเนอร์จะลบ URL ที่ร้องขอไปยังเส้นทางบริบทแอปพลิเคชันปัจจุบันเป็น URL การแมป Servlet ตัวอย่างเช่นฉันกำลังเยี่ยมชม http: //localhost/test/aaa.html (บริบทแอปพลิเคชันของฉันคือการทดสอบ)
คอนเทนเนอร์จะลบ http: // localhost/tes และใช้ส่วนที่เหลือ /aaa.html เพื่อให้ตรงกับการแมป servlet นั่นคือใช้ส่วนที่เหลือเพื่อให้ตรงกับ url-pattern ของ servlet ที่กำหนดค่าใน web.xml
หมายเหตุ: มีกฎบางอย่างสำหรับกระบวนการจับคู่การแมปนี้และในที่สุดการแข่งขันแต่ละครั้งจะตรงกับ servlet เพียงหนึ่งเดียว (สิ่งนี้แตกต่างจากตัวกรอง)
กฎการจับคู่ servlet: เมื่อ servlet ตรงกับความสำเร็จมันจะไม่ถูกจับคู่เพิ่มเติม
การจับคู่เส้นทางที่แม่นยำ:
ตัวอย่าง: ตัวอย่างเช่น url-pattern ของ servleta คือ /ทดสอบและ url-pattern ของ servletb คือ /* ในเวลานี้หาก URL ที่ฉันเข้าถึงคือ http: // localhost/test
ในเวลานี้คอนเทนเนอร์จะทำการจับคู่เส้นทางที่แม่นยำเป็นครั้งแรกและค้นหาว่า /การทดสอบนั้นถูกจับคู่โดย Servleta ดังนั้น Call Servleta และจะไม่ให้ความสนใจกับ Servlets อื่น ๆ
การจับคู่เส้นทางที่ยาวที่สุด:
ตัวอย่าง: url-pattern ของ servleta คือ/test/*และ url-pattern ของ servletb คือ/test/a/* เมื่อเข้าถึง http: // localhost/test/a,
คอนเทนเนอร์จะเลือก servlet ที่มีเส้นทางที่ยาวที่สุดเพื่อให้ตรงกับซึ่งเป็น servletb ที่นี่
การจับคู่ส่วนขยาย: หากส่วนสุดท้ายของ URL มีส่วนขยายคอนเทนเนอร์จะเลือก servlet ที่เหมาะสมตามส่วนขยาย
ตัวอย่าง: url-pattern ของ servleta: *.Action
4. Servlets และตัวกรองนั้นมีจุดมุ่งหมายที่ URL และอื่น ๆ ในขณะที่ผู้ฟังจะถูกกำหนดเป้าหมายไปที่วัตถุเช่นการสร้างเซสชันและการเกิดขึ้นของเซสชัน SetAttribute และทำอะไรบางอย่างเมื่อเหตุการณ์ดังกล่าวเกิดขึ้น
สามารถใช้กับ: สปริงรวม struts, การฉีดแอตทริบิวต์ในการกระทำของ struts, ใช้งานการกำหนดเวลาเว็บแอปพลิเคชัน, สถิติเกี่ยวกับจำนวนผู้ใช้ออนไลน์ ฯลฯ
5. interceptor interceptor คล้ายกับตัวกรอง แต่ได้รับการกำหนดค่าใน struts.xml ไม่ใช่ใน web.xml และไม่ใช่สำหรับ URL แต่สำหรับการดำเนินการ เมื่อหน้าส่งการดำเนินการ
การดำเนินการกรองนั้นเทียบเท่ากับกลไกปลั๊กอินที่จัดทำโดย struts1.x มันถือได้ว่าเป็นอดีตคือตัวกรองที่จัดทำโดย struts1.x และ interceptor เป็นตัวกรองที่จัดทำโดย struts2
ความแตกต่างจากตัวกรอง:
(1) มันไม่ได้กำหนดค่าใน web.xml แต่ได้รับการกำหนดค่าใน struts.xml และอยู่กับการกระทำ (2) การกระทำนั้นสามารถระบุตัวดักที่ใช้ในการทำสิ่งต่าง ๆ ก่อนที่จะได้รับมัน
6. ความแตกต่างและการเชื่อมต่อระหว่างตัวกรองและตัวดักใน struts2:
(1) interceptor จัดทำโดย struts2 ในขณะที่ตัวกรองมีให้โดยมาตรฐาน servlet
(2) สกัดกั้นวิธีการเป้าหมายของการกระทำเป้าหมายในขณะที่ตัวกรองกำหนดเป้าหมายแหล่งข้อมูลเว็บต่างๆ
(3) Interceptor ถูกกำหนดค่าใน struts.xml ในขณะที่ตัวกรองถูกกำหนดค่าในไฟล์ web.xml
(4) ตัวดักจับถูกจัดระเบียบร่วมกันโดยใช้สแต็คสกัดกั้นในขณะที่ตัวกรองจะเชื่อมโยงเข้าด้วยกันตามทรัพยากรที่สกัดกั้น ลำดับของการดำเนินการจะถูกกำหนดโดยตำแหน่งของพวกเขาในไฟล์การกำหนดค่า
(5) Interceptors ขึ้นอยู่กับกลไกการสะท้อน Java ในขณะที่ตัวกรองจะขึ้นอยู่กับการเรียกกลับฟังก์ชั่น
(6) ตัวกรองขึ้นอยู่กับคอนเทนเนอร์ servlet ในขณะที่ตัวดักจับไม่ได้ขึ้นอยู่กับคอนเทนเนอร์ servlet
(7) Interceptors สามารถทำงานตามคำขอการดำเนินการเท่านั้นในขณะที่ตัวกรองสามารถทำงานได้เกือบทุกคำขอ
(8) Interceptor สามารถเข้าถึงวัตถุในบริบทการกระทำและสแต็กค่า แต่ตัวกรองไม่สามารถทำได้
(9) ในช่วงวงจรชีวิตของการกระทำการดักจับสามารถเรียกได้หลายครั้งในขณะที่ตัวกรองสามารถเรียกได้เพียงครั้งเดียวเมื่อคอนเทนเนอร์เริ่มต้น
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!