Contoh dalam artikel ini merangkum metode umum pemrosesan file statis di Javaweb, yang memiliki nilai praktis besar dalam pengembangan program Javaweb. Metode spesifiknya dirangkum sebagai berikut:
Metode 1: Aktifkan Servlet default Tomcat untuk memproses file statis
Tambahkan di web.xml:
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</ nama-servlet> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
Catatan: Harus ditulis di depan DispatcherServlet, dan biarkan defaultServlet mencegat permintaan terlebih dahulu, sehingga permintaan tersebut tidak masuk ke Spring menurut saya kinerjanya adalah yang terbaik.
Nama Servlet default yang disertakan dengan Tomcat, Jetty, JBoss, dan GlassFish -- "default"
Nama Servlet default yang disertakan dengan Google App Engine -- "_ah_default"
Nama Servlet default yang disertakan dengan Resin -- "resin-file"
Nama Servlet default yang disertakan dengan WebLogic -- "FileServlet"
Nama Servlet default yang disertakan dengan WebSphere -- "SimpleFileServlet"
Metode 2: mvc:resources disediakan di musim semi 3.0.4 dan versi yang lebih baru Cara menggunakan:
<!-- Akses ke file sumber daya statis--> <mvc:resources map="/images/**" location="/images/" />
Deskripsi: /images/** dipetakan ke ResourceHttpRequestHandler untuk diproses, dan lokasi menentukan lokasi sumber daya statis. Ini bisa berada di bawah direktori root aplikasi web atau di dalam paket jar, sehingga sumber daya statis dapat dikompresi paket toples. periode cache dapat mengaktifkan sumber daya statis untuk di-cache web
Metode ketiga, gunakan <mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
Url "/**" akan didaftarkan di urlMap SimpleUrlHandlerMapping, dan akses ke sumber daya statis akan ditransfer dari HandlerMapping ke org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler untuk diproses dan dikembalikan.
DefaultServletHttpRequestHandler menggunakan Servlet default dari setiap kontainer Servlet.
Catatan tambahan: Masalah dengan urutan eksekusi beberapa HandlerMappings:
Nilai atribut pesanan DefaultAnnotationHandlerMapping adalah: 0
<mvc:resources/>Nilai atribut order dari SimpleUrlHandlerMapping yang terdaftar secara otomatis adalah: 2147483646
<mvc:default-servlet-handler/>Nilai atribut order dari SimpleUrlHandlerMapping yang terdaftar secara otomatis adalah: 2147483647
Spring akan mengeksekusi order dengan nilai lebih kecil terlebih dahulu. Saat mengakses file gambar a.jpg, cari dulu prosesornya melalui DefaultAnnotationHandlerMapping. Itu tidak boleh ditemukan karena kita tidak memiliki Action yang disebut a.jpg. Kemudian cari dalam urutan nilai pesanan. Karena SimpleUrlHandlerMapping terakhir cocok dengan "/**", itu pasti akan cocok dan Anda dapat merespons gambar tersebut.
Untuk mengakses gambar, Anda harus melalui lapisan pencocokan. Tidak yakin bagaimana kinerjanya?
Terakhir, izinkan saya menjelaskan bahwa saat mengakses sumber daya statis di Skema 2 dan Skema 3, jika ada total pencegat (perkiraan) yang cocok, pencegat tersebut akan digunakan. Jika Anda menerapkan pemeriksaan izin dalam intersepsi, berhati-hatilah saat memfilter permintaan file statis ini.
Jika DispatcherServlet Anda mencegat akhiran URL seperti *.do, masalah di atas tidak akan ada. Masih nyaman untuk memiliki sufiks.