Ringkasan
Artikel ini akan fokus pada penerapan pengalihan di musim semi dan membahas alasan di balik setiap strategi.
Mengapa mengarahkan ulang?
Pertama, mari kita pertimbangkan mengapa Anda mungkin perlu melakukan pengalihan di aplikasi Spring Anda.
Tentu saja ada banyak contoh dan alasan yang mungkin. Yang sederhana dapat menjadi data formulir pasca, sekitar pengajuan dua kali lipat dari masalah, atau hanya mendelegasikan aliran eksekusi ke metode pengontrol lain.
Satu hal yang perlu diperhatikan adalah bahwa pola Post/Redirect/GET khas tidak cukup menyelesaikan masalah komitmen ganda - masalah menyegarkan halaman sebelum komit awal selesai masih dapat menghasilkan komitmen ganda.
Redirect Menggunakan RedirectView
Mari kita mulai dengan metode sederhana ini - mari kita ambil contoh secara langsung:
Di belakang RedirectView akan memecat httpservletResponse.sendredirect () - ini akan melakukan pengalihan yang sebenarnya.
Perhatikan bagaimana kami menyuntikkan properti yang diarahkan ke dalam metode di sini - kerangka kerja ini melakukan bagian dari pekerjaan berat ini, memungkinkan kami untuk berinteraksi dengan properti ini.
Kami menambahkan atribut ke model redirectattributes - Ekspos sebagai parameter kueri HTTP. Model berisi objek - biasanya string atau objek yang dapat dikonversi menjadi string.
Sekarang mari kita uji fungsi pengalihan kami - gunakan perintah curl sederhana untuk membantu:
Hasilnya adalah:
Redirect Menggunakan Redirect: Awalan
Metode sebelumnya menggunakan RedirectView, karena tidak optimal karena beberapa alasan.
Pertama, kami sekarang digabungkan ke API Spring karena kami menggunakan RedirectView secara langsung dalam kode kami.
Kedua, kita perlu tahu sejak awal bahwa ketika menerapkan operasi pengontrol, hasilnya akan selalu diarahkan, tetapi ini tidak selalu terjadi.
Opsi yang lebih baik adalah menggunakan Redirect: awalan - nama tampilan pengalihan disuntikkan ke pengontrol seperti nama tampilan logis lainnya. Pengontrol bahkan tidak tahu bahwa pengalihan sedang terjadi.
Sepertinya ini:
Ketika nama tampilan dikembalikan dengan pengalihan:, kelas UrlbasedViewResolver (dan semua subkelasnya) mengenalinya sebagai indikasi khusus yang perlu dialihkan. Sisa nama tampilan akan diperlakukan sebagai URL pengalihan.
Ada tempat yang perlu diperhatikan di sini - ketika kami menggunakan tampilan logis Redirect:/RedirectectedUrl di sini, kami melakukan pengalihan terkait dengan konteks servlet saat ini.
Jika Anda perlu mengarahkan ulang ke URL absolut, kami dapat menggunakan nama seperti ini: Redirect: http: // localhost: 8080/spring-redirect/redirectedUrl.
Jadi sekarang, saat kami menjalankan perintah curl:
Kami akan segera mendapatkan pengalihan:
Meneruskan dengan awalan ke depan
Sekarang mari kita lihat bagaimana melakukan sesuatu yang sedikit berbeda - penerusan.
Sebelum melihat kode, mari kita lihat ringkasan cepat dan tingkat tinggi dari semantik penerusan dan pengalihan:
Redirect akan merespons dengan URL baru yang berisi kode respons 302 dan header lokasi; Kemudian browser/klien akan mengajukan permintaan ke URL baru lagi sepenuhnya di sisi server; Wadah Servlet meneruskan permintaan yang sama ke URL target; URL di browser tidak perlu diubah
Sekarang mari kita lihat kode:
Seperti Redirect:, The Forward: awalan akan diuraikan oleh UrlbasedViewResolver dan subclass -nya. Secara internal, ini membuat Operasi InternalResourCeView yang melakukan Operasi RequestDispatcher.forward () untuk tampilan baru.
Saat kami menjalankan perintah dengan ikal:
Kami akan mendapatkan HTTP 405 (tidak diizinkan metode):
Dalam hal ini, kami hanya memiliki satu permintaan yang dikirim dari browser/klien ke sisi server dibandingkan dengan dua permintaan yang kami miliki dalam solusi pengalihan. Tentu saja, properti yang ditambahkan oleh pengalihan tidak diperlukan.
Properti yang mengandung redirectattributes
Berikutnya - Mari kita lihat properti yang lewat dalam pengalihan - manfaatkan pengalihan kembali dalam kerangka:
Seperti yang disebutkan sebelumnya, kita dapat memasukkan objek properti langsung ke dalam metode - yang membuat mekanisme sangat mudah digunakan.
Perhatikan juga bahwa kami juga menambahkan atribut flash - ini adalah properti yang tidak akan ditambahkan ke URL. Kita dapat mencapai properti ini - kita nanti dapat menggunakan @ModelAttribute ("FlashAttribute") dalam metode target akhir yang dialihkan untuk mengakses atribut Flash:
Jadi, selesaikan dengan sukses - jika Anda perlu menggunakan curl untuk menguji fungsi:
Kami akan dialihkan ke lokasi baru:
Dengan cara ini, menggunakan redirectattribures alih -alih ModelMap memberi kita kemampuan untuk berbagi beberapa properti hanya antara dua metode yang terlibat dalam operasi pengalihan.
Konfigurasi lain tanpa awalan
Sekarang mari kita jelajahi konfigurasi lain - pengalihan tanpa awalan.
Untuk mencapai ini, kita perlu menggunakan org.springframework.web.servlet.view.xmlviewResolver:
Alih -alih org.springframework.web.servlet.view.internalResourCeviewResolver yang kami gunakan dalam konfigurasi kami sebelumnya:
Kita juga perlu mendefinisikan kacang redirectview dalam konfigurasi:
Sekarang kita dapat merujuk pada kacang baru ini melalui ID untuk memicu pengalihan:
Untuk mengujinya, kami menggunakan perintah curl lagi:
Hasilnya adalah:
Redirect HTTP Posting permintaan permintaan
Untuk penggunaan kasus seperti pembayaran bank, kita mungkin perlu mengarahkan kembali permintaan HTTP POST. Bergantung pada kode status HTTP yang dikembalikan, permintaan POST dapat diarahkan ke HTTP GET atau POST.
Menurut referensi protokol HTTP 1.1, kode status 301 (dihapus secara permanen) dan 302 (ditemukan) memungkinkan metode permintaan diubah dari pos menjadi. Spesifikasi ini juga mendefinisikan kode status 307 (pengalihan sementara) dan 308 (pengalihan permanen) yang relevan yang tidak memungkinkan mengubah metode permintaan dari pos menjadi.
Sekarang mari kita lihat kode untuk mengarahkan kembali permintaan posting ke permintaan posting lain:
Sekarang, mari kita gunakan perintah CURL untuk menguji pos yang dialihkan:
Kami diarahkan ke alamat tujuan:
sebagai kesimpulan
Artikel ini memperkenalkan tiga cara berbeda untuk mengimplementasikan pengalihan di musim semi, cara menangani/lulus atribut saat melakukan pengalihan ini dan cara menangani pengalihan permintaan HTTP Post.
Di atas adalah panduan pengalihan vspring (pengalihan) dan masalah strategi terkait yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!