Filter di Servlets dan JSP adalah kelas Java, dan tujuan keberadaannya adalah sebagai berikut:
Intersepsi saat meminta akses ke sumber daya backend
Kelola respons yang dikembalikan dari server ke klien
Beberapa jenis filter umum tercantum di bawah ini:
Filter otentikasi
Filter kompresi data
penyaring enkripsi
Filter yang memicu peristiwa akses sumber daya
Filter konversi gambar
Filter masuk dan autentikasi
Filter rantai tipe MIME
Penyaring token
Filter XSL/T untuk mengubah konten XML
Filter akan dimasukkan ke dalam file web.xml dan dipetakan ke nama servlet, file JSP, atau pola URL. File deskripsi penerapan web.xml dapat ditemukan di direktori <Tomcat-installation-directory>conf.
Saat kontainer JSP memulai aplikasi web, ia membuat instance dari setiap filter. Filter ini harus dideklarasikan dalam file deskriptor penerapan web.xml dan dijalankan sesuai urutan deklarasinya.
Filter adalah kelas Java yang mengimplementasikan antarmuka javax.servlet.Filter. Antarmuka javax.servlet.Filter mendefinisikan tiga metode:
| nomor seri | Metode & Deskripsi |
|---|---|
| 1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Kontainer akan memanggil metode ini setiap kali permintaan/respons melewati rantai filter, karena klien meminta sumber daya di akhir rantai. |
| 2 | public void init(FilterConfig filterConfig) Kontainer memanggil metode ini untuk menunjukkan bahwa filter ditempatkan di layanan |
| 3 | public void destroy() Metode ini dipanggil oleh container untuk menunjukkan bahwa filter sedang dihapus dari layanan |
Contoh ini akan mencetak alamat IP serta tanggal dan waktu setiap akses ke file JSP. Tentu saja, ini hanyalah contoh sederhana untuk memberi Anda gambaran tentang penggunaan filter sederhana, tetapi Anda dapat menggunakan konsep ini untuk membuat sendiri program yang lebih kompleks.
//Memperkenalkan paket Java import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*; //Menerapkan kelas Filter public class LogFilter mengimplementasi Filter { public void init( FilterConfig config) throws ServletException{ // Dapatkan parameter inisialisasi String testParam = config.getInitParameter("test-param"); //Cetak parameter inisialisasi System.out.println("Param Uji: " + testParam } public void doFilter(Permintaan ServletRequest, respons ServletResponse, rantai FilterChain) melempar java.io.IOException, ServletException { // Dapatkan alamat ip klien String ipAddress = request.getRemoteAddr(); // Keluaran alamat ip dan waktu saat ini System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // Lewati rantai filter permintaan chain.doFilter(request,response); public void destroy(){ /* Setelah instance Filter dimusnahkan di server Dipanggil sebelum penghapusan. */ }}Kompilasi file LogFilter.java, dan kemudian tempatkan file kelas yang dikompilasi di direktori <Tomcat instalasi>/webapps/ROOT/WEB-INF/classes.
Filter didefinisikan dan kemudian dipetakan ke URL atau nama file JSP, seperti bagaimana servlet didefinisikan dan dipetakan. Dalam file deskripsi penerapan web.xml, gunakan tag <filter> untuk pemetaan filter:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value >Paramter Inisialisasi</param-value> </init-param></filter><filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
Filter di atas akan diterapkan ke semua servlet dan program JSP karena kami menentukan "/*" dalam konfigurasi. Anda juga dapat menentukan jalur servlet atau JSP jika Anda hanya ingin menerapkan filter ke beberapa servlet atau program JSP.
Sekarang, akses halaman servlet atau JSP seperti biasa, dan Anda akan menemukan catatan akses ini di log server. Anda juga dapat menggunakan logger Log4J untuk login ke file lain.
Aplikasi web Anda dapat menentukan banyak filter berbeda. Sekarang Anda sudah menentukan dua filter, AuthenFilter dan LogFilter, langkah lainnya sama seperti sebelumnya, kecuali Anda membuat pemetaan yang berbeda, seperti ini:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value >Paramter Inisialisasi</param-value> </init-param></filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Paramter Inisialisasi</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
Urutan pemetaan elemen <filter> di web.xml menentukan urutan penerapan filter ini oleh penampung. Untuk membalikkan urutan aplikasi, Anda cukup membalikkan urutan elemen <filter> yang didefinisikan di web.xml.
Misalnya, contoh di atas akan menerapkan LogFilter terlebih dahulu, lalu AuthenFilter, namun contoh berikut akan membalik urutan penerapannya:
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping> <filter-name>LogFilter</filter -nama> <url-pattern>/*</url-pattern></filter-mapping>