ตัวดักมักใช้ในสปริง MVC เมื่อกำหนดค่าพา ธ ที่จำเป็นต้องมีการดักจับ <MVC: การแม็พ/> ฉลากย่อยมักจะใช้ มันมีแอตทริบิวต์เส้นทางซึ่งใช้เพื่อระบุเส้นทางที่ต้องดักจับ ตัวอย่างเช่น:
<MVC: Interceptor> <MVC: การแมปพา ธ = "/**"/> <bean/> </mvc: interceptor> </mvc: interceptor>
ตามการกำหนดค่าข้างต้นการสกัดกั้นการร้องขอทั้งหมดนี้
การจับคู่เส้นทางในสปริง MVC นั้นมีความยืดหยุ่นมากกว่า web.xml มาตรฐาน นโยบายเริ่มต้นใช้ org.springframework.util.antpathmatcher เช่นเดียวกับชื่อที่แนะนำรูปแบบเส้นทางใช้เส้นทางสไตล์ Apache Ant มีวิธีการจับคู่ไวด์การ์ดสามวิธีสำหรับเส้นทางสไตล์ Apache Ant (แสดงอยู่ในตารางด้านล่าง) สิ่งเหล่านี้สามารถรวมรูปแบบเส้นทางที่ยืดหยุ่นได้มากมาย
Table Ant Wildcard อักขระ
ไพ่ | คำอธิบาย |
| - | จับคู่อักขระตัวเดียว |
| - | จับคู่ 0 หรือจำนวนอักขระใด ๆ |
| - | จับคู่ไดเรกทอรี 0 ขึ้นไป |
ตัวอย่างตารางรูปแบบเส้นทางมดสไตล์
| เส้นทาง | คำอธิบาย |
| /App/*.x | จับคู่ไฟล์. x ทั้งหมดภายใต้เส้นทางแอพ |
| /app/p? ttern | จับคู่ /แอพ /รูปแบบและ /แอพ /pxttern แต่ไม่ใช่ /แอพ /pttern |
| /**/ตัวอย่าง | จับคู่ /แอพ /ตัวอย่าง /แอป /foo /ตัวอย่างและ /ตัวอย่าง |
| /App/**/dir/file | Matches /app/dir/file.jsp, /app/foo/dir/file.html, /app/foo/bar/dir/file.pdf และ /app/dir/file.java |
| /**/*.jsp | ตรงกับไฟล์. jsp ใด ๆ |
การจับมือ
เว็บแอปพลิเคชันโดยทั่วไปขึ้นอยู่กับการแมประหว่าง URL และตัวประมวลผลคำขอและสิ่งเดียวกันนั้นเป็นจริงสำหรับ Spring MVC แต่ Spring MVC เป็นเหมือนทุกอย่างที่ฤดูใบไม้ผลิทำ (นักแปล: ยืดหยุ่นสามารถกำหนดค่าทุกประเภทได้ แต่ยังสร้างความซับซ้อนมากมาย) ไม่เพียง แต่มีวิธีเดียวในการแมปความสัมพันธ์ระหว่าง URL และตัวควบคุมและในความเป็นจริงมันช่วยให้คุณสามารถสร้างกฎการแมปและการใช้งานด้วยตัวเองแทนที่จะพึ่งพาการแมป URL
สปริงให้การประมวลผลการทำแผนที่ URL และลำดับและวิธีการประมวลผลรูปแบบเส้นทางไม่ จำกัด เฉพาะอินเทอร์เฟซใด ๆ การใช้งานเริ่มต้นของ Spring MVC org.springframework.web.servlet.handler Abstracturlhandlermapping จะตรงกับเส้นทางกับรูปแบบเส้นทางที่ยาวที่สุด
ตัวอย่างเช่น: ได้รับคำขอคือ /app/dir/file.jsp และตอนนี้มีรูปแบบการจับคู่พา ธ สองรูปแบบ /**/*.jsp และ /app/dir/*.jsp แล้วรูปแบบ URL จะตรงกับรูปแบบใด รูปแบบสุดท้าย /App/dir/*.jsp จะถูกจับคู่โดยหลักการของตัวละครที่ยาวที่สุดซึ่งมีอักขระมากกว่า /**/*.jsp โปรดทราบว่าหลักการนี้ไม่ได้ระบุไว้ในอินเทอร์เฟซระดับสูงใด ๆ แต่เป็นรายละเอียดการใช้งาน
beannameurlhandlermapping
การใช้กลยุทธ์การแมปเริ่มต้นคือ org.springframework.web.servlet.handler.beannameurlhandlermapping คลาส คลาสนี้ต้องการให้ถั่วใด ๆ ที่เป็นไปได้ในการจัดการคำขอจะต้องมีชื่อหรือนามแฝงเริ่มต้นด้วยอักขระ backslash (/) ชื่อหรือนามแฝงนี้สามารถเป็นชื่อใด ๆ ที่สอดคล้องกับหลักการจับคู่เส้นทาง URL
รายการคอนโทรลเลอร์ที่แมปโดยชื่อถั่ว
รหัส XML
<bean name = "/home"> <property name = "FlightService" ref = "FlightService"/> </ebean>
■หมายเหตุ: คุณไม่สามารถใช้แอตทริบิวต์ ID เพื่อระบุเส้นทาง URL ใด ๆ เนื่องจาก (/) อักขระถูกห้ามในข้อมูลจำเพาะ XML เพื่อระบุ ID ของ XML แต่คุณสามารถมีทั้ง ID และแอตทริบิวต์ชื่อในนิยามถั่ว
มันใช้งานง่ายมากและมีข้อเสียบางอย่าง มันไม่สามารถพาดพิงถึงถั่วต้นแบบได้ กล่าวอีกนัยหนึ่งเมื่อใช้ beannameurlhandlermapping คลาสการประมวลผลคำขอทั้งหมดสามารถเป็น singletons เท่านั้น โดยทั่วไปการพูดผู้ควบคุมจะถูกจัดตั้งขึ้นตาม Singletons ดังนั้นนี่จึงไม่ใช่ปัญหาที่ร้ายแรงมาก นอกจากนี้ฉันจะแนะนำคอนโทรลเลอร์ในบทต่อไปนี้และจะมีตัวควบคุมเพียงไม่กี่ประเภทที่ต้องเป็นต้นแบบ
■หมายเหตุ: ถั่วต้นแบบเป็นถั่วที่ไม่ใช่ซิงเกิล เมื่อใดก็ตามที่วิธีการ getBean () ของ ApplicationContext เรียกว่าอินสแตนซ์ถั่วใหม่จะถูกส่งคืน
ปัญหาอีกประการหนึ่งเกี่ยวกับ beannameurlhandlermapping คือการใช้ interceptor ในแอปพลิเคชันของคุณ เนื่องจากแผนที่ที่ร้องขอและแผนที่การตัดกันของถั่วนั้นถูกผูกไว้ด้วยกันและไม่ได้แยกออกจากกันจึงเป็นไปไม่ได้ที่จะสร้างความสัมพันธ์ที่ซับซ้อนระหว่างคอนโทรลเลอร์และตัวดักจับ หากคุณมีข้อกำหนดการแมปคำขอที่ซับซ้อนคุณสามารถใช้ SimpleUrlhandlermapping แทนการทำ beannameurlhandlermapping Simpleurlhandlermapping เป็นอีกทางเลือกหนึ่งสำหรับการทำ beannameurlhandlermapping SimpleUrlhandlermapping ชี้ไปที่จุดอ่อนที่สำคัญสองประการของ Beannameurlhandlermapping มันสามารถแมปโปรเซสเซอร์ประเภทต้นแบบและช่วยให้คุณสร้างเส้นทางการทำแผนที่ที่ซับซ้อนและยืดหยุ่นระหว่างตัวจัดการและตัวดักจับ อัลกอริทึมการทำแผนที่ใช้ส่วนประกอบพื้นฐานเช่นเดียวกับ beannameurlhandlermapping ดังนั้นรูปแบบนี้ยังคงทำแผนที่ URL เพื่อขอตัวจัดการ (ตัวจัดการคำขอ) คุณสามารถประกาศได้ใน ApplicationContext และใช้ SimpleUrlhandlermapping dispatcherservlet จะพบได้ตามประเภทและจะไม่สร้าง mapper เริ่มต้น (beannameurlhandlermapping) ซึ่งหมายความว่าหากคุณต้องการใช้ทั้งสองอย่างคุณต้องประกาศทั้งหมดใน ApplicationContext
■ Prompt DispatchERServlet จะจัดการคำขอในห่วงโซ่ (นักแปล: คำขอกระบวนการตามลำดับคุณสามารถอ้างถึงโหมดความรับผิดชอบในตัวกรองและ GOFs) ซึ่งช่วยให้สามารถประมวลผลการแมปได้ตามความต้องการของคุณ โปรเซสเซอร์การทำแผนที่ (การแมปตัวจัดการ) ใช้อินเทอร์เฟซ OrderEdR
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับคำอธิบายโดยละเอียดของหลักการจับคู่เส้นทาง MVC Spring Path ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!