- Apakah
applicationContext.xml
danspring-servlet.xml
bagaimanapun terkait dalam Kerangka Kerja Spring? - Akankah file properti yang dideklarasikan
applicationContext.xml
tersedia untukDispatcherServlet
? - Pada catatan terkait, mengapa saya perlu
*-servlet.xml
sama sekali? MengapaapplicationContext.xml
sendirian saja tidak cukup?
373
Jawaban:
Spring memungkinkan Anda mendefinisikan banyak konteks dalam hierarki orangtua-anak.
The
applicationContext.xml
mendefinisikan kacang untuk "konteks webapp root", yaitu konteks yang terkait dengan webapp.The
spring-servlet.xml
(atau apa pun yang Anda sebut) mendefinisikan kacang untuk konteks aplikasi satu servlet. Mungkin ada banyak dari ini di webapp, satu per Spring servlet (misalnyaspring1-servlet.xml
untuk servletspring1
,spring2-servlet.xml
untuk servletspring2
).Kacang dalam
spring-servlet.xml
dapat merujuk kacang dalamapplicationContext.xml
, tetapi tidak sebaliknya.Semua pengendali Spring MVC harus masuk dalam
spring-servlet.xml
konteks.Dalam kebanyakan kasus sederhana,
applicationContext.xml
konteksnya tidak perlu. Biasanya digunakan untuk mengandung kacang yang dibagikan di antara semua servlet di webapp. Jika Anda hanya memiliki satu servlet, maka tidak ada gunanya, kecuali Anda memiliki penggunaan khusus untuk itu.sumber
skenario 1
Dalam aplikasi klien (aplikasi bukan aplikasi web, mis. Mungkin aplikasi ayun)
Tidak perlu web.xml . ApplicationContext sebagai wadah untuk mendapatkan layanan kacang. Tidak perlu wadah server web. Di test-client.xml mungkin ada kacang Sederhana tanpa remoting, kacang dengan remoting.
Kesimpulan : Dalam Konteks 1 aplikasiContext dan
DispatcherServlet
tidak terkait.Skenario 2
Dalam aplikasi server (aplikasi yang digunakan di server misalnya Tomcat). Layanan yang diakses melalui remoting dari program klien (misalnya aplikasi Swing)
Tentukan pendengar di web.xml
Di server, startup
ContextLoaderListener
instantiates beans didefinisikan dalam applicationContext.xml .Dengan asumsi Anda telah menentukan yang berikut ini di applicationContext.xml :
Kacang yang instantiated dari keempat file konfigurasi test1.xml , test2.xml , test3.xml , test4.xml .
Kesimpulan : Dalam Konteks 2 aplikasiContext dan
DispatcherServlet
tidak terkait.Skenario 3
Dalam aplikasi web dengan pegas MVC.
Di web.xml define:
Ketika Tomcat dimulai, kacang yang didefinisikan dalam springweb-servlet.xml dipakai.
DispatcherServlet
meluasFrameworkServlet
. DalamFrameworkServlet
kacang Instansiasi berlangsung untuk springweb. Dalam kasus kami springweb adalah FrameworkServlet.Kesimpulan : Dalam Konteks 3 applicationContext dan
DispatcherServlet
tidak terkait.Skenario 4
Dalam aplikasi web dengan pegas MVC. springweb-servlet.xml untuk servlet dan applicationContext.xml untuk mengakses layanan bisnis dalam program server atau untuk mengakses layanan DB di program server lain.
Di web.xml berikut ini didefinisikan:
Pada permulaan server,
ContextLoaderListener
instanti kacang yang ditentukan dalam applicationContext.xml ; dengan asumsi Anda telah menyatakan di sini:Kacang semua instantiated dari keempat test1.xml , test2.xml , test3.xml , test4.xml . Setelah penyelesaian instantiasi kacang didefinisikan dalam applicationContext.xml , kacang didefinisikan dalam springweb-servlet.xml adalah instantiated.
Jadi urutan instantiasi adalah: root (konteks aplikasi), lalu FrameworkServlet.
Sekarang harus jelas mengapa mereka penting dalam skenario mana.
sumber
DispatcherServlet
tidak akan dipanggil jika url tidak diakhiri dengan .action?Satu hal lagi yang ingin saya tambahkan. Dalam
spring-servlet.xml
kami menyertakan pemindaian komponen untuk paket Kontroler. Dalam contoh berikut ini kami menyertakan anotasi filter untuk paket pengontrol.Di
applicationcontext.xml
kami tambahkan filter untuk paket yang tersisa tidak termasuk controller.sumber
@Controller
kacang dalam konteks servlet (diperlukan oleh Spring MVC).Dengan kata-kata sederhana,
applicationContext.xml
mendefinisikan kacang yang dibagikan di antara semua servlets. Jika aplikasi Anda memiliki lebih dari satu servlet, maka mendefinisikan sumber daya bersama diapplicationContext.xml
akan lebih masuk akal.spring-servlet.xml
mendefinisikan kacang yang hanya terkait dengan servlet itu. Ini dia servlet pengirim. Jadi, pengendali Spring MVC Anda harus ditentukan dalam file ini.Tidak ada yang salah dalam mendefinisikan semua kacang di
spring-servlet.xml
jika Anda hanya menjalankan satu servlet di aplikasi web Anda.sumber
Dalam teknologi Servlet jika Anda ingin meneruskan input apa pun ke servlet tertentu, maka Anda harus memasukkan param init seperti kode di bawah ini.
Jika Anda ingin melewatkan beberapa di tempat yang umum untuk semua servlets maka saat itu Anda perlu mengkonfigurasi param konteks. Contoh
JADI persis seperti ini ketika kita bekerja dengan Spring MVC kita perlu memberikan beberapa informasi kepada servlet yang disediakan oleh Spring yaitu DispatcherServlet melalui init param. Jadi konfigurasinya adalah sebagai fallows, di sini kami menyediakan spring-servlet.xml sebagai parameter init untuk DispatcherServlet.
Sekali lagi kita memerlukan beberapa parameter konteks. Itu berlaku untuk seluruh aplikasi. Jadi kami dapat menyediakan konteks root yaitu applicationcontext.xml Konfigurasi seperti ini:
sumber
Konteks aplikasi menyediakan sarana untuk menyelesaikan pesan teks, termasuk dukungan untuk i18n dari pesan-pesan itu. Konteks aplikasi menyediakan cara umum untuk memuat sumber daya file, seperti gambar. Konteks aplikasi dapat mempublikasikan acara ke kacang yang terdaftar sebagai pendengar. Operasi tertentu pada wadah atau kacang dalam wadah, yang harus ditangani secara terprogram dengan pabrik kacang, dapat ditangani secara deklaratif dalam konteks aplikasi. Dukungan ResourceLoader: Spring's Resource interface kami abstraksi generik yang fleksibel untuk menangani sumber daya tingkat rendah. Konteks aplikasi itu sendiri adalah ResourceLoader, Oleh karena itu menyediakan aplikasi dengan akses ke instance Sumber Daya spesifik penyebaran. Dukungan MessageSource: Konteks aplikasi mengimplementasikan MessageSource, sebuah antarmuka yang digunakan untuk mendapatkan pesan lokal,
sumber