Artikel ini memperkenalkan aturan pencocokan pola URL dari servlets dan membagikannya kepada Anda. Dengan rincian sebagai berikut:
Pertama, kita perlu mengklarifikasi beberapa aturan yang membingungkan:
1. Aturan pencocokan dalam wadah Servlet bukan wildcard sederhana atau ekspresi reguler, tetapi aturan khusus. Jadi jangan gunakan wildcard atau aturan pencocokan ekspresi reguler untuk melihat pola url servlet.
2. Mulai dari Servlet 2.5, servlet dapat menggunakan beberapa aturan pola URL. Tag <servlet-Mapping> menyatakan aturan pencocokan yang sesuai dengan servlet, dan masing-masing tag <rerl-pola> mewakili 1 aturan pencocokan;
3. Ketika wadah servlet menerima permintaan URL yang diprakarsai oleh browser, wadah akan menggunakan URL untuk mengurangi jalur konteks aplikasi saat ini dan menggunakan string yang tersisa sebagai pemetaan servlet. Jika URL adalah http: // localhost: 8080/appdemo/index.html dan konteks aplikasinya adalah appdemo, wadah akan menghapus http: // localhost: 8080/appdemo dan menggunakan bagian yang tersisa /index.html untuk membuat pemetaan servlet cocok.
4. Proses pencocokan pemetaan pola URL memiliki prioritas
5. Dan ketika servlet cocok dengan sukses, servlet yang tersisa tidak akan diperhatikan.
1. Empat aturan pencocokan
1 pertandingan yang tepat
Item yang dikonfigurasi dalam <rerl-pola> harus sesuai dengan URL dengan tepat.
<servlet-Mapping> <servlet-name> myServlet </servlet-name> <rucs Pattern> /User/users.html </rerl-pattion> <rerl-pattern> /index.html </rerl-pattern> <rerl-pattern> /user/adduser.action </url-pattern> </servlet>
Saat memasuki URL berikut di browser, mereka akan dicocokkan dengan servlet
http: // localhost: 8080/appdemo/user/user.html
http: // localhost: 8080/appdemo/index.html
http: // localhost: 8080/appdemo/user/adduser.action
Melihat:
http: // localhost: 8080/appdemo/user/adduser/adalah url ilegal dan tidak akan dikenali sebagai http: // localhost: 8080/appdemo/user/adduser
Selain itu, URL di atas dapat diikuti oleh kondisi kueri apa pun, dan akan dicocokkan, seperti
http: // localhost: 8080/appdemo/user/adduser? nama pengguna = tom & usia = 23 akan dicocokkan dengan myServlet.
2 Path Match
String yang dimulai dengan karakter "/" dan diakhiri dengan "/*" digunakan untuk pencocokan jalur
<servlet-mapping> <servlet-name> myServlet </servlet-name> <rucs-pola>/user/*</rerl-pattern> </servlet-Mapping>
Jalur dimulai dengan /pengguna /, dan jalur berikut dapat sewenang -wenang. Misalnya, URL berikut akan dicocokkan.
http: // localhost: 8080/appdemo/user/user.html
http: // localhost: 8080/appdemo/user/adduser.action
http: // localhost: 8080/appdemo/user/updateUser.actionl
3 pencocokan ekstensi
String dimulai dengan "*." digunakan untuk pencocokan ekstensi
<servlet-Mapping> <servlet-name> myServlet </servlet-name> <RURL-pola>*. jsp </rerl-pola> <rerl-pola>*. Action </rerl-pattern> </servlet-Mapping>
Kemudian permintaan URL apa pun dengan ekstensi JSP atau tindakan akan cocok, misalnya, URL berikut akan dicocokkan
http: // localhost: 8080/appdemo/user/user.jsp
http: // localhost: 8080/appdemo/tohome.action
4 pertandingan default
<servlet-Mapping> <servlet-name> myServlet </servlet-name> <rucs-pola>/</url-pola> </servlet-mapping>
2. Pesanan Pencocokan
1. Pencocokan yang tepat, servlet-mapping1: <rerl-pola> /user/users.html </rerl-pattern>, servlet-mapping2: <rerl-pattern>/*</uRl-pattern>. Saat permintaan http: // localhost: 8080/appdemo/user/user.html datang, servlet-mapping1 cocok dan tidak lagi cocok dengan servlet-mapping2
2. Pencocokan Path, Pertama Cocokkan Jalur Terpanjang, lalu Cocokkan Path Terpendek-Path-Mapping1: <Url-Pattern>/User/*</rerl-Pattern>, Servlet-Mapping2: <RURL-PATER>/*</url-pola>. Saat permintaan http: // localhost: 8080/appdemo/user/user.html datang, servlet-mapping1 cocok dan tidak lagi cocok dengan servlet-mapping2
3. Pencocokan ekstensi, servlet-mappping1: <rerl-pola>/user/*</rerl-pattern>, servlet-mapping2: <rerl-pola>*. Action </rerl-pattern>. Ketika permintaan http: // localhost: 8080/appdemo/user/adduser.action datang, servlet-mapping1 cocok dan tidak lagi cocok dengan servlet-mapping2
4. Pencocokan default tidak ditemukan di servlet di atas, jadi gunakan servlet default dan konfigurasikan sebagai <rerl-pola>/</rerl-pola>
Masalah yang perlu dicatat
Pencocokan 1 jalur dan pencocokan ekstensi tidak dapat diatur pada saat yang sama
Hanya ada tiga metode pencocokan, baik pencocokan jalur (dimulai dengan karakter "/" dan diakhiri dengan "/*"), pencocokan ekstensi (dimulai dengan "*."), Atau pencocokan yang tepat. Tiga metode pencocokan tidak dapat digabungkan, jadi jangan menerima begitu saja untuk menggunakan wildcard atau aturan reguler.
Misalnya, <rerl-pola>/user/*. Action </rerl-Pattern> ilegal
Catatan juga: <RURL-PATERS>/AA/*/BB </Url-Pattern> adalah kecocokan dan legal yang tepat. * Ini bukan arti dari kecocokan liar.
2 "/*" dan "/" memiliki makna yang berbeda
Tomcat Mengkonfigurasi Servlet Default di file %Catalina_Home %/conf/web.xml, dan kode konfigurasi adalah sebagai berikut
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value> false </param-value> </init-param> <Boad-on-startup> 1 </load-on-startup> </servlet> <servlet> <servlet-name> jsp </servlet-name> </servlet> org.apache.jasper.servlet.jspservlet </servlet> <pam-classis> <param-classs> <param-netinion.jasper.servlet.jspservlet </Paramlet> <pary-classis> <pary-classis> <param-plainies> <parame--netinion <param-value> false </param-value> </init-param> <InT-param> <param-name> xPoweredBy </param-name> <param-value> false </param-value> </init-param> <Boad-on-startup> 3 </load-on-startup> </init-param> <load-on-startup> </load-on-startup> </servlet> <bound-papping> <RURL-PATERS>/</RURL-PATERS> </SERVLET-MAPPING> <!-Pemetaan untuk JSP Servlet-> <servlet-Mapping> <servlet-name> JSP </servlet-name> <rerl-pola>*jsp </url-pola> <rerl-pola>*.
Iv. Berikan contoh
| URL pemetaan | Servlet yang sesuai |
| /Halo | servlet1 |
| /bbs/admin/* | servlet2 |
| /bbs/* | servlet3 |
| *.jsp | servlet4 |
| / | servlet5 |
Hasil pemetaan permintaan yang sebenarnya
Hapus jalur yang tersisa dari jalur konteks | Servlet yang menangani permintaan |
/Halo | servlet1 |
/bbs/admin/login | servlet2 |
/bbs/admin/index.jsp | servlet2 |
/BBS/Tampilan | servlet3 |
/bbs/index.jsp | servlet3 |
/bbs | servlet3 |
/index.jsp | servler4 |
/hello/index.jsp | servlet4 |
/hello/index.html | servlet5 |
/berita | servlet5 |
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.