ตัวกรองเป็นตัวอย่างโค้ดที่นำกลับมาใช้ใหม่ได้ซึ่งสามารถใช้ในการแปลงคำขอ HTTP การตอบกลับและข้อมูลส่วนหัว ตัวกรองไม่เหมือน servlet ไม่สามารถสร้างคำขอหรือการตอบกลับได้ เพียงแค่ปรับเปลี่ยนคำขอไปยังทรัพยากรบางอย่างหรือแก้ไขการตอบสนองจากทรัพยากรบางอย่าง
เมื่อเร็ว ๆ นี้เมื่อใช้การเขียนสคริปต์ฉันใช้คุกกี้เพื่อระบุคอมพิวเตอร์เพิ่มการกรองและการศึกษา servlets และตัวกรองอย่างระมัดระวัง ความแตกต่างหลักคือ:
วงจรชีวิตของตัวกรองโดยทั่วไปจะผ่านสามขั้นตอนต่อไปนี้:
ลักษณะของ servlets คือ:
การเริ่มต้น
วิธีการ init () ถูกเรียกเมื่อคอนเทนเนอร์โหลดตัวกรองแรก คลาสนี้มีการอ้างอิงถึงวัตถุการกำหนดค่าตัวกรองในวิธีนี้ ตัวกรองของเราไม่จำเป็นต้องทำเช่นนี้เนื่องจากไม่มีการใช้ข้อมูลการเริ่มต้นและที่นี่มันเป็นเพียงเพื่อวัตถุประสงค์ในการสาธิต
กรอง
เวลาส่วนใหญ่ของตัวกรองถูกใช้ที่นี่ วิธีการ Dofilter นั้นถูกเรียกโดยคอนเทนเนอร์และการอ้างอิงไปยังคำขอ Servlet, การตอบสนองของ Servlet และวัตถุโซ่ตัวกรองในห่วงโซ่คำขอ/ตอบสนองจะถูกส่งผ่านในเวลาเดียวกัน จากนั้นตัวกรองจะมีโอกาสในการประมวลผลคำขอส่งงานประมวลผลไปยังทรัพยากรถัดไปในห่วงโซ่ (โดยเรียกวิธี Dofilter ในการอ้างอิงวัตถุโซ่ตัวกรอง) จากนั้นประมวลผลการตอบสนองเมื่อการควบคุมการประมวลผลกลับไปยังตัวกรอง
การทำลาย
คอนเทนเนอร์เรียกวิธีการทำลาย () ทันทีก่อนที่จะรวบรวมขยะเพื่อให้สามารถเรียกใช้รหัสการทำความสะอาดที่จำเป็นได้
เกี่ยวกับ chain.dofilter (คำขอการตอบสนอง) ฟังก์ชั่นของเขาคือการส่งต่อคำขอไปยังวัตถุถัดไปในห่วงโซ่ตัวกรอง ถัดไปที่นี่หมายถึงตัวกรองถัดไปหากไม่มีตัวกรองมันเป็นทรัพยากรที่คุณร้องขอ โดยทั่วไปแล้วตัวกรองเป็นโซ่เดียวและมีเพียงไม่กี่การกำหนดค่าใน web.xml เชื่อมต่อทีละคน
คำขอ -> filter1 -> filter2 -> filter3 -> .... -> แหล่งข้อมูลคำขอ
ตัวกรองคือการดำเนินการโซ่ดังนั้นเมื่อประมวลผลตัวกรองเดียวในที่สุดคุณต้องข้ามไปที่ servlet เพื่อตอบสนองต่อคำขอ
หากคุณผ่านห่วงโซ่เมธอด chain.dofilter (การร้องขอการตอบสนอง) จะข้ามไปที่ servlet ที่สกัดกั้นทันทีและกลับไปที่ตัวกรองโซ่เทียบเท่ากับประตูออกไปจากประตูนี้แล้วกลับจากประตูนี้ วิธีการเรียกใช้ตัวกรองคือการกำหนดค่าใน web.xml และคุณต้องกำหนดค่ารูปแบบ URL ที่เหมือนกับ servlet ที่คุณต้องสกัดกั้น
<!-กำหนดค่าตัวกรอง-> <filter> <filter-name> suibianxie </filter-name> <silter-class> com.etoak.filter.myencoding </filter-class> <!-กำหนดค่าพารามิเตอร์ส่วนตัว-> <int-param> </filter> <!-คำสั่งของการสกัดกั้นเกี่ยวข้องกับลำดับการแมป-> <ตัวกรอง-แมป> <filter-name> suibianxie </filter-name> <!-โปรดทราบว่าสิ่งนี้จะต้องสอดคล้องกับ url-pattern ของ servlet ที่จะดักจับ <!-กำหนดค่าตัวกรองที่สอง-> <filter> <filter-name> suibianxie2 </filter-name> <filter-class> com.etoak.filter.naming </filter-class> </filter> <filter-mapping> <servlet> <servlet-name> ทดสอบ </servlet-name> <servlet-class> com.etoak.servlet.test </servlet-lass> </servlet> <servlet-mapping> <servlet-name> ทดสอบ </servlet-name>
ข้างต้นคือความแตกต่างและการเชื่อมต่อระหว่าง Servlets และตัวกรองที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!