Artikel ini memperkenalkan contoh -contoh pengalihan dan pencegat di SpringMVC. Itu dibagikan dengan Anda, sebagai berikut:
Parameter variabel saat merancang metode, gunakan数据类型... untuk mendeklarasikan tipe parameter, misalnya: public static void function(int... numbers)
Saat mengimplementasikan Badan Metode, parameter variabel diproses sebagai array
tes kelas publik {public static void main (string [] args) {System.out.println (test.sum (1,2,3)); System.out.println (test.sum (1,2,3,4,54)); } public static int sum (int ... angka) {int sum = 0; untuk (int i = 0; i <number.length; i ++) {sum+= angka [i]; } return sum; }}Catatan: Dalam setiap metode, hanya 1 parameter variabel yang paling diizinkan, dan jika ada parameter variabel, itu harus menjadi parameter terakhir.
Meneruskan dan mengarahkan ulang
Dalam metode penanganan permintaan di dalam controller, metode default untuk mengembalikan string adalah penerusan. Nilai yang diteruskan adalah nama komponen tampilan, seperti return "Login", yang pada dasarnya akan mendapatkan halaman yang akhirnya ditampilkan berdasarkan View Resolver (ViewResolver). Sintaks pengalihan pengembalian: jalur mewakili pengalihan. Konten di sisi kanan Redirect: adalah jalurnya. Jalur ini biasanya menggunakan jalur relatif, dan dirujuk berdasarkan jalur di bilah alamat klien saat ini sebagai standar. Misalnya, alamat saat ini adalah: http: // localhost: 8080/proyek/pengguna/reg.do, dan kemudian mengembalikan "redirect: login.do", dan kemudian mengarahkan ke http: // localhost: 8080/proyek/pengguna/login.do, jika Anda mengembalikan "redirect: /main/index.do" or or or or or or or or or or or or " http: // localhost: 8080/Project/Main/Index.do
maju:
Metode default, tetapi Anda juga dapat menggunakan Return "Forward: Login"
Tampilan yang dikembalikan harus berupa tampilan, yang akan diteruskan ke tampilan yang ditentukan setelah melewati tampilan parser.
Redirect:
Redirect: return "Redirect: Login.do"
Mengembalikan jalur ke metode pengontrol, bukan tampilan. Ini tidak akan melewati parser tampilan, tetapi akan melompat langsung.
Contoh
@RequestMapping (value = "/handle_reg.do", Method = requestMethod.post) handleReG public handlereg (pengguna pengguna, peta ModelMap) {coba {Userservice.reg (user); System.out.println ("Terdaftar dengan sukses!"); return "Redirect: Login.do"; // Redirect ke metode kontrol login.do, login.do sesuai untuk maju ke login.jsp} catch (UsernameconflictException e) {System.out.println (e.getMessage ()); peta.put ("errorMessage", e.getMessage ()); mengembalikan "kesalahan"; }} @RequestMapping (value = "Login.do") Public String handlelogin () {return "Login"; }Pencegat
Konsep Dasar
Menggunakan Interceptor
Kelas Interceptor Kustom
Buat kelas intersep (demoInterceptor) untuk mengimplementasikan antarmuka handlerinterceptor
DemoInterceptorImplements kelas publik HandlerInterceptor { /*** Dipanggil sebelum prosesor mengeksekusi* @param meminta objek httpservletRequest, yang dapat memperoleh parameter permintaan, dll.* @param respons httpservletResponse. Jika benar dikembalikan, pencegat dan prosesor berikutnya akan dieksekusi */ preHandle boolean publik (permintaan httpservletRequest, respons httpservletResponse, penangan objek) melempar pengecualian {System.out.println ("PreHandler Eksekusi demoInterceptor"); Kembali Benar; } / *** Dipanggil setelah prosesor dieksekusi, dan hubungi sebelum melompat ke tampilan yang ditentukan* @param permintaan httpservletrequest objek* @param respons httpservletResponse objek controller @param httpserview response* @param handler controller objek controller* @param modelviewiewiew Posthandle (permintaan httpservletRequest, respons httpservletResponse, penangan objek, model dan model modelAndView) melempar pengecualian { /*** 1. Anda dapat merancang logika Anda sendiri, dalam beberapa kasus, pengembalian False, return true* 2. Return true berarti bahwa prosesor selanjutnya dan intercepor dieksekor, pengembalian FALSE* System.out.println ("Handler:"+Handler); System.out.println ("Eksekusi Posthandler dari DemoInterceptor"); // Atur nama tampilan, lalu setelah eksekusi selesai, itu akan melompat ke halaman index.jsp // modelAndView.setViewName ("index"); } /** * Panggilan * Setelah pemrosesan permintaan selesai, public void AfterCompletion (httpservletRequest, respons httpservletResponse, pawang objek, excle ex) melempar eksekusi {System.out.println ("DemoInterceptor setelah pelaksanaan aftercompletion"); }}Konfigurasikan dalam file konfigurasi springmvc
Konfigurasi
Harus dikonfigurasi dalam urutan di atas, jika tidak kesalahan akan dilaporkan
<!-- Configure the interceptor, where multiple interceptors can be configured --><mvc:interceptors> <mvc:interceptor> <!-- Configure the interceptor path, and intercept all processor method mappings under /user, for example: http://localhost:8080/Springmvc/user/login.do, this request will be intercepted --> <mvc: mappingpath = "/user/*"/> <!-Mengkonfigurasi metode pengontrol yang tidak dicegat oleh interseptor, ini adalah konfigurasi opsional, seperti http: // localhost: 8080/springmvc/user/index.do, ini tidak akan dicegat-<mvc: excludepatpath = "/ini tidak akan dicegat. <MVC: Excule-MappingPath = "/user/login.do"/> <!-Konfigurasikan kacang pencegat, menentukan nama kelas lengkap-> <beansclass = "cn.tedu.spring.interceptor.demointerceptor"> </tean> </mvc: interceptor> </mvc: Intercepors ...
Metode implementasi
Public Boolean Prehandle (permintaan httpservletRequest, respons httpservletResponse, penangan objek)
public void posthandle (permintaan httpservletRequest, respons httpservletResponse, penangan objek, model dan model danview)
public void aftercompletion (permintaan httpservletrequest, respons httpservletResponse, penangan objek, exception ex)
Pemeriksaan login demo
Interceptor khusus (LoginInterceptor)
Proses spesifik ditulis dengan sangat jelas dalam metode prehandler
Kelas Publik LoginInceptorImplements HandlerInterceptor { / * * dipanggil sebelum prosesor dieksekusi (non-javadoc) * 1. Dapatkan sesi * 2. Baca nilai UID dalam sesi * jika nol, itu berarti tidak ada login, kemudian secara langsung mengalihkan ke antarmuka login dan mengembalikan false pada saat yang sama. Tidak perlu menjalankan proses selanjutnya* jika tidak nol, itu berarti bahwa ia telah masuk, kemudian secara langsung mengembalikan true dan terus mengeksekusi pencegat atau prosesor berikutnya*/ prehandle boolean publik (handler httpservletrequest, httpservletression response (handler objek) membuat pengecualian {httpservletesponsion (handler objek) membuat pengecualian {httpserpsespession, ht. // Dapatkan Sesi Objek UID = session.getAttribute ("UID"); // Baca objek di sesi // jika ada uid, maka Anda dapat masuk dan menyelesaikan if (uid! = Null) {return true; // Kembalikan true, jika login berhasil, Anda perlu menjalankan proses} response.sendRedirect berikutnya (request.getContextPath ()+"/user/login.do"); // Redirect ke antarmuka login mengembalikan false; //Return false, the subsequent process does not need to be executed, and it is directly interrupted} public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception Ex) melempar pengecualian {}}Konfigurasikan Interceptor di SpringMVC
Karena di sini hanya melompat ke pusat pengguna dan perlu memverifikasi login, itu hanya cocok dengan user_center.do
<!-- Configure interceptors, where multiple interceptors can be configured --> <mvc:interceptors> <mvc:interceptor> <mvc:mappingpath="/user/user_center.do"/> <beanclass="cn.tedu.spring.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
Urutan eksekusi dari beberapa pencegat
Jalankan sesuai dengan pesanan yang dikonfigurasi dalam file konfigurasi SpringMVC, yaitu urutan pencegat yang dikonfigurasi di bawah <mvc: Interceptors>. Jika pencegat dilakukan di jalur yang sama, maka interceptor pertama yang dikonfigurasi pertama
Perbedaan antara interseptor dan filter (perbedaan utama)
Meringkaskan
Pencegatan dapat digunakan ketika beberapa permintaan memerlukan tugas yang sama atau sangat mirip.
Kembangkan interceptor dengan baik, maka Anda perlu mengonfigurasinya di file konfigurasi springmvc
Dalam <MVC: Interceptors>, jika beberapa <MVC: Interceptors> dikonfigurasi, beberapa pencegat akan membentuk rantai pencegat. Jika beberapa pencegat dikonfigurasi, mereka akan mencegat jalur yang sama, dan kemudian mereka akan dieksekusi dalam urutan node yang dikonfigurasi.
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.