Pencegat sering digunakan di Spring MVC. Saat mengkonfigurasi jalur yang perlu dicegat, <mvc: pemetaan/> sub-label sering digunakan. Ini memiliki atribut jalur, yang digunakan untuk menentukan jalur yang perlu dicegat. Misalnya:
<mvc: interceptor> <mvc: pemetaan path = "/**"/> <bean/> </mvc: Interceptor> </mvc: Interceptor>
Menurut konfigurasi di atas, interseptor ini mencegat semua permintaan.
Pencocokan jalur di Spring MVC jauh lebih fleksibel daripada Web.xml standar. Kebijakan default mengimplementasikan org.springframework.util.antpathmatcher. Sama seperti namanya, pola jalur menggunakan jalur gaya semut Apache. Ada tiga metode pencocokan wildcard untuk jalur gaya semut Apache (tercantum dalam tabel di bawah). Ini dapat menggabungkan banyak pola jalur yang fleksibel.
Table Ant Wildcard karakter
Wildcard | Keterangan |
| ? | Cocokkan karakter tunggal |
| * | Cocokkan 0 atau jumlah karakter |
| ** | Cocokkan 0 atau lebih direktori |
Tabel Contoh Pola Jalur Gaya Ant
| Jalur | Keterangan |
| /app/*.x | Mencocokkan semua file .x di bawah jalur aplikasi |
| /APP/P? TERN | Pencocokan /Aplikasi /Pola dan /Aplikasi /PXTTERN, tetapi tidak /App /Pttern |
| /**/contoh | Pencocokan /aplikasi /contoh, /app /foo /contoh, dan /contoh |
| /app/**/dir/file. | Kecocokan /app/dir/file.jsp, /app/foo/dir/file.html, /app/foo/bar/dir/file.pdf, dan /app/dir/file.java |
| /**/*.jsp | Cocok dengan file .jsp apapun |
Handlermapping
Aplikasi Web pada dasarnya tergantung pada pemetaan antara URL dan prosesor permintaan, dan hal yang sama berlaku untuk Spring MVC, tetapi Spring MVC sama seperti semua yang dilakukan Spring (penerjemah: fleksibel, dapat mengkonfigurasi semua jenis hal, tetapi juga menciptakan banyak kompleksitas). Tentu saja tidak hanya ada satu cara untuk memetakan hubungan antara URL dan pengontrol, dan pada kenyataannya, itu memungkinkan Anda untuk membuat aturan pemetaan dan implementasi sendiri, daripada mengandalkan pemetaan URL.
Spring menyediakan pemrosesan pemetaan URL, dan urutan serta metode pemrosesan pola jalur tidak terbatas pada antarmuka apa pun. Implementasi default Spring MVC org.springframework.web.servlet.handler. Abstracturlhandlermapping akan cocok dengan jalur dengan pola jalur terpanjang.
Misalnya: Diberikan permintaan adalah /app/dir/file.jsp dan sekarang ada dua pola pencocokan jalur /**/*.jsp dan /app/dir/*.jsp, lalu, pola apa yang akan cocok dengan URL? Pola terakhir /app/dir/*.jsp akan dicocokkan dengan prinsip karakter terpanjang, yang memiliki lebih banyak karakter daripada /**/*.jsp. Perhatikan bahwa prinsip ini tidak ditentukan dalam antarmuka tingkat tinggi apa pun, tetapi merupakan detail implementasi.
Beannameurlhandlermapping
Implementasi strategi pemetaan default adalah org.springframework.web.servlet.handler.BeanNameUrlHandlermapping kelas. Kelas ini mensyaratkan bahwa setiap kacang yang mungkin untuk menangani permintaan harus memiliki nama atau alias yang dimulai dengan karakter backslash (/). Nama atau alias ini dapat berupa nama apa pun yang sesuai dengan prinsip pencocokan Jalur URL.
Mendaftarkan pengontrol yang dipetakan dengan nama kacang
Kode XML
<bean name = "/home"> <properti name = "flightservice" ref = "flightservice"/> </bean>
■ Catatan: Anda tidak dapat menggunakan atribut ID untuk menentukan jalur URL apa pun, karena (/) karakter dilarang dalam spesifikasi XML untuk menentukan ID XML, tetapi Anda dapat memiliki baik atribut ID dan nama dalam definisi kacang.
Sangat mudah digunakan dan memiliki beberapa kelemahan. Itu tidak dapat menyinggung kacang prototipe. Dengan kata lain, saat menggunakan beannameurlhandlermapping, semua kelas pemrosesan permintaan hanya bisa menjadi singleton. Secara umum, pengontrol didirikan menurut singleton, jadi ini bukan masalah yang sangat serius. Juga, saya akan memperkenalkan pengontrol di bab -bab berikut, dan hanya akan ada beberapa jenis pengontrol yang perlu menjadi prototipe.
■ Catatan: Prototipe kacang adalah kacang non-singleton. Setiap kali metode getBean () dari ApplicationContext dipanggil, instance kacang baru akan dikembalikan.
Masalah lain dengan beannameurlhandlermapping adalah bahwa pencegat diterapkan dalam aplikasi Anda. Karena peta yang diminta dan peta imaping kacang terikat bersama dan tidak dipisahkan, tidak mungkin untuk menciptakan hubungan yang kompleks antara pengontrol dan pencegat. Jika Anda memiliki persyaratan pemetaan permintaan yang kompleks, Anda dapat menggunakan SimpleurlHandlermapping alih -alih beannameurlhandlermapping. SimpleurlHandlermapping adalah opsi lain untuk BeanNameUrlHandlermapping. Simpleurlhandlermapping secara langsung menunjuk ke dua kelemahan utama beannameurlhandlermapping. Ini dapat memetakan prosesor permintaan tipe prototipe, dan memungkinkan Anda untuk membuat jalur pemetaan yang kompleks dan fleksibel antara penangan dan pencegat. Algoritma pemetaan menggunakan komponen dasar yang sama dengan beannameurlhandlermapping, sehingga pola ini masih harus memetakan URL untuk meminta penangan (meminta penangan), Anda cukup mendeklarasikannya di ApplicationContext dan menggunakan SimpleUrlandlermapping. DispatcherServlet akan ditemukan sesuai dengan jenis dan tidak akan membuat mapper default (beannameurlhandlermapping). Ini berarti bahwa jika Anda ingin menggunakan keduanya, Anda harus mendeklarasikan semuanya di ApplicationContext.
■ DispatcherServlet prompt akan menangani permintaan dalam rantai (penerjemah: permintaan proses secara berurutan, Anda dapat merujuk pada mode rantai tanggung jawab dalam filter dan GOF), yang memungkinkan pemetaan diproses sesuai dengan kebutuhan Anda. Prosesor pemetaan (pemetaan pawang) mengimplementasikan antarmuka orderedr.
Di atas adalah semua konten dari artikel ini tentang penjelasan terperinci dari prinsip pencocokan jalur MVC musim semi, saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!