Kata pengantar
Sistem interseptor adalah bagian penting dari kerangka struts2. Tidak berlebihan untuk mengatakan bahwa tanpa sistem pencegat, tidak akan ada kerangka kerja Struts2 yang mudah digunakan. Dalam kerangka struts2, sejumlah besar pencegat telah menyelesaikan banyak fungsi dasar. Misalnya, Params Interceptor bertanggung jawab untuk mem -parsing parameter permintaan HTTP dan mengatur properti tindakan; Interceptor Servlet-Config secara langsung melewati instance httpservletRequest dan instance httpservletResponse dalam permintaan HTTP untuk bertindak; Fileupload Interceptor bertanggung jawab untuk mem-parsing domain file dalam parameter permintaan dan mengatur domain file ke tiga properti tindakan ... semua ini dilakukan oleh pencegat bawaan. Oleh karena itu, menguasai prinsip -prinsip dan metode menggunakan pencegat di Struts2, kita dapat memahami "garis hidup" dari kerangka kerja Struts2.
Namun, sampai sekarang, selain mengkonfigurasi filter strutsprepareand executeFilter di web.xml, kami belum menghubungi pencegat lainnya. Jadi mengapa aplikasi kita bisa berjalan dengan baik? Faktanya, Struts2 telah memungkinkan sejumlah besar pencegat umum secara default. Pencegat ini akan bekerja selama paket yang dikonfigurasi untuk tindakan mewarisi paket struts-default. Mari kita lihat interseptor built-in Struts2.
Struts2 Interceptor bawaan
Ada banyak pencegat bawaan dalam kerangka struts2. Pencegat ini hampir menyelesaikan 70% dari pekerjaan kerangka struts2, termasuk parameter permintaan parsing, menetapkan parameter permintaan untuk atribut tindakan, dll. Desain pintar struts2 sebagian besar disebabkan oleh desain pencegat; Ketika diperlukan untuk memperluas fungsi Struts2, Anda hanya perlu memberikan pencegat yang sesuai dan mengonfigurasinya di wadah Struts2.
Pencegat bawaan ini dikonfigurasi dalam file Struts-Default.xml dalam bentuk pasangan kelas nama, di mana nama adalah nama pencegat, yang merupakan pengidentifikasi unik dari pencegat yang akan digunakan nanti; Kelas Menentukan kelas implementasi Interceptor. Untuk deskripsi terperinci tentang pencegat bawaan ini, silakan merujuk ke dokumentasi resmi.
Konfigurasikan pencegat
Mendefinisikan interseptor dalam file struts.xml hanya memerlukan menentukan nama pencegat untuk kelas pencegat, dan definisi pencegat selesai. Tentukan pencegat menggunakan <interceptor .../>, misalnya:
<!-Tentukan Interceptor dengan menentukan nama interceptor dan kelas implementasi interceptor-> <Interceptor name = "Name Interceptor"> <param name = "Param Name"> Nilai Param </param> </sterceptor>
Selain itu, beberapa pencegat dapat dihubungkan bersama untuk membentuk tumpukan interseptor, dan <interceptor-ref .../> digunakan dalam pencegat untuk menentukan referensi pencegat. Misalnya:
<interceptor-stack name = "Interceptor Stack One"> <interceptor-ref name = "Interceptor One"/> <Interceptor-Ref Name = "Interceptor Two"/> ... </sterceptor-stack>
Dari perspektif struktur program, tumpukan interseptor terdiri dari beberapa pencegat; Tetapi dari perspektif fungsi program, stack interceptor dan interseptor adalah sama, dan metode yang mereka dikandung akan dieksekusi secara otomatis sebelum pelaksanaan metode pelaksanaan tindakan. Oleh karena itu, kita dapat sepenuhnya memperlakukan tumpukan pencegat sebagai pencegat yang lebih besar.
Karena tumpukan interceptor dan interseptor konsisten, tumpukan interseptor juga dapat berisi tumpukan interseptor, misalnya:
<interceptor-stack name = "Interceptor Stack 2"> <interceptor-ref name = "ModelDriven"/> <Interceptor-Ref name = "Interceptor Stack 1"/> </sterceptor-stack>
Menggunakan Interceptor
Setelah tumpukan interceptor dan interseptor didefinisikan, stack atau interseptor interceptor ini dapat digunakan untuk mencegat tindakan. Perilaku intersepsi interseptor akan dieksekusi sebelum tindakan dijalankan.
Dengan menggunakan elemen <interceptor-ref .../>, sintaks konfigurasi menggunakan interseptor dalam suatu tindakan persis sama dengan sintaks referensi interseptor saat mengkonfigurasi tumpukan interceptor. Misalnya:
<action name="login"> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> <!-- Interceptor stack--> <interceptor-ref name="defaultStack"/> <!-- Interceptor-ref name="test1"/> <!-- Interceptor with parameters--> <interceptor-ref name="test2"> <param name = "Key"> Parameter Dinamis </param> </sterceptor-ref> </action>
Setelah konfigurasi ini selesai, ketiga pencegat ini akan berfungsi sebelum unduhan dieksekusi.
Konfigurasikan pencegat default
Saat mengkonfigurasi paket, itu dapat ditentukan dengan pencegat default. Setelah pencegat default ditentukan untuk paket, pencegat default akan berfungsi jika tindakan dalam paket itu tidak secara eksplisit menentukan pencegat. Namun, begitu kami secara eksplisit menerapkan pencegat pada tindakan dalam paket, pencegat default tidak akan berfungsi; Jika tindakan memerlukan pencegat default untuk digunakan, Anda harus secara manual mengkonfigurasi referensi ke pencegat.
Interceptor default untuk paket di mana tindakan berada akan berlaku hanya jika tidak ada yang diterapkan secara eksplisit dalam tindakan.
Konfigurasikan pencegat default untuk menggunakan elemen <default-interceptor-ref .../>, yang digunakan sebagai anak dari elemen <paket .../>, dan konfigurasikan pencegat default untuk semua tindakan di bawah paket ini. Misalnya:
<Default-Interceptor-Ref Name = "Default Interceptor"/>
Anda juga dapat menentukan parameter untuk pencegat default, misalnya:
<Default-Interceptor-Ref Name = "Default Interceptor"> <param name = "Nama parameter"> Nilai parameter </param> </default-interceptor-ref>
Dalam file Struts-Default.xml, paket abstrak bernama Struts-Default dikonfigurasi, di mana referensi interseptor default bernama DefaultStack ditentukan. Ketika paket yang kami definisikan mewarisi paket struts-default, ia juga mewarisi stack interceptor default: defaultStack, yang juga berarti bahwa jika kita tidak secara eksplisit menerapkan pencegat untuk bertindak, stack interceptor DefaultStack akan berlaku secara otomatis.
Pencegat khusus
1>. Tambahkan kelas untuk mewarisi kelas AbstractInterceptor, atau mengimplementasikan antarmuka Interceptor
Kelas Publik TimeInterceptor memperluas AbstractInterceptor {/*** Nilai pengembalian metode inti intersep adalah string*/@overridepublic string intersep (doa actionInvocation) melempar Exception {// TODO Metode yang dihasilkan auto, login ";}}2>. Tambahkan Node Anak Interceptor di paket struts.xml dan tambahkan simpul interceptor di bawahnya
<nama paket = "barang" namespace = "/barang" meluas = "common-pkg"> <sterceptors> <name interceptor = "timeInterceptor"> </interceptor> </sterceptors> </package>
3.
<action name = "list_category" method = "list"> <interceptor-ref name = "timeInterceptor"> </sterceptor-ref> <name result = "list" type = "dispatcher">/halaman/kategori/daftar.jsp </hasilnya> </action>
Meringkaskan
Artikel ini memberikan ringkasan awal inti Stuts2 - The Interceptor. Dalam artikel berikutnya, kami akan menerapkan pencegat kami sendiri dan menerapkan poin pengetahuan yang dirangkum dalam artikel ini.
Oke, di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.