Apa perbedaan antara Konteks Aplikasi dan Konteks Aplikasi Web?
Saya sadar bahwa WebApplicationContext
ini digunakan untuk aplikasi berorientasi arsitektur Spring MVC?
Saya ingin tahu apa gunanya ApplicationContext
aplikasi MVC? Dan jenis kacang apa yang didefinisikan ApplicationContext
?
spring
spring-mvc
applicationcontext
Sumit Trehan
sumber
sumber
web.xml
file; pertanyaan ini menanyakan tentang beberapa kelas Musim Semi.web.xml
tetapi berbicara tentang varian konfigurasi kacang XML SpringApplicationContext
danWebApplicationContext
. Semua definisi kacang dalamapplicationContext.xml
akan tersediaApplicationContext
sementara sementara semua definisi kacang dalam*-servlet.xml
akan tersedia dalam aWebApplicationContext
.Jawaban:
Konteks Aplikasi Web memperluas Konteks Aplikasi yang dirancang untuk bekerja dengan javax.servlet.ServletContext standar sehingga dapat berkomunikasi dengan wadah.
Kacang, instantiated di WebApplicationContext juga akan dapat menggunakan ServletContext jika mereka mengimplementasikan antarmuka ServletContextAware
Ada banyak hal yang mungkin dilakukan dengan instance ServletContext, misalnya mengakses sumber daya WEB-INF (konfigurasi xml dan lain-lain) dengan memanggil metode getResourceAsStream (). Biasanya semua konteks aplikasi yang didefinisikan dalam web.xml dalam servlet Spring application adalah konteks Aplikasi Web, ini berlaku untuk konteks root webapp dan konteks aplikasi servlet.
Juga, tergantung pada kemampuan konteks aplikasi web dapat membuat aplikasi Anda sedikit lebih sulit untuk diuji, dan Anda mungkin perlu menggunakan kelas MockServletContext untuk pengujian.
Perbedaan antara konteks servlet dan root Spring memungkinkan Anda untuk membangun hierarki konteks aplikasi bertingkat, sehingga kacang yang diperlukan akan diambil dari konteks induk jika tidak ada dalam konteks aplikasi saat ini. Dalam aplikasi web sebagai default ada dua tingkat hirarki, akar dan servlet konteks: .
Ini memungkinkan Anda untuk menjalankan beberapa layanan sebagai lajang untuk seluruh aplikasi (kacang Spring Security dan layanan akses basis data dasar biasanya berada di sini) dan layanan lain sebagai layanan terpisah di servlet yang sesuai untuk menghindari bentrokan nama di antara kacang. Misalnya satu konteks servlet akan melayani halaman web dan lainnya akan menerapkan layanan web stateless.
Pemisahan dua tingkat ini keluar dari kotak ketika Anda menggunakan kelas servlet musim semi: untuk mengkonfigurasi konteks aplikasi root Anda harus menggunakan tag konteks-param di web.xml Anda
(konteks aplikasi root dibuat oleh ContextLoaderListener yang dideklarasikan di web.xml
) dan tag servlet untuk konteks aplikasi servlet
Harap dicatat bahwa jika init-param akan dihilangkan, maka pegas akan menggunakan myservlet-servlet.xml dalam contoh ini.
Lihat juga: Perbedaan antara applicationContext.xml dan spring-servlet.xml di Spring Framework
sumber
Kembali ke hari-hari Servlet, web.xml hanya dapat memiliki satu
<context-param>
, jadi hanya satu objek konteks yang dibuat ketika server memuat aplikasi dan data dalam konteks itu dibagi di antara semua sumber daya (Contoh: Servlets dan JSP). Ini sama dengan memiliki nama driver Database dalam konteks, yang tidak akan berubah. Dengan cara yang sama, ketika kita mendeklarasikan param contextConfigLocation di<contex-param>
Spring menciptakan satu objek Konteks Aplikasi.Anda dapat memiliki beberapa Servlet dalam suatu aplikasi. Misalnya Anda mungkin ingin menangani / mengamankan / * permintaan dengan satu cara dan / non-seucre / * dengan cara lain. Untuk setiap Servlet ini, Anda dapat memiliki objek konteks, yang merupakan WebApplicationContext.
sumber
Jawaban yang diterima adalah melalui tetapi ada penjelasan resmi tentang ini:
Omong-omong servlet dan konteks root keduanya webApplicationContext:
sumber
ApplicationContext (Root Application Context): Setiap aplikasi web MVC Spring memiliki file applicationContext.xml yang dikonfigurasi sebagai akar dari konfigurasi konteks. Pegas memuat file ini dan membuat konteks aplikasi untuk seluruh aplikasi. File ini diambil oleh ContextLoaderListener yang dikonfigurasi sebagai parameter konteks dalam file web.xml. Dan hanya akan ada satu applicationContext per aplikasi web.
WebApplicationContext: WebApplicationContext adalah konteks aplikasi sadar web yaitu memiliki informasi konteks servlet. Aplikasi web tunggal dapat memiliki beberapa WebApplicationContext dan setiap servlet Dispatcher (yang merupakan pengontrol depan arsitektur Spring MVC) dikaitkan dengan WebApplicationContext. File konfigurasi webApplicationContext * -servlet.xml khusus untuk DispatcherServlet. Dan karena aplikasi web dapat memiliki lebih dari satu servlet operator yang dikonfigurasi untuk melayani beberapa permintaan, mungkin ada lebih dari satu file webApplicationContext per aplikasi web.
sumber
Konteks aplikasi web , yang ditentukan oleh
WebApplicationContext
antarmuka, adalah konteks aplikasi Spring untuk aplikasi web. Ia memiliki semua properti konteks aplikasi Musim Semi biasa, mengingat bahwaWebApplicationContext
antarmuka memperluasApplicationContext
antarmuka, dan menambahkan metode untuk mengambil API Servlet standarServletContext
untuk aplikasi web.Selain lingkup kacang Spring standar
singleton
danprototype
, ada tiga cakupan tambahan yang tersedia dalam konteks aplikasi web:request
- cakupan definisi kacang tunggal ke siklus hidup permintaan HTTP tunggal; yaitu, setiap permintaan HTTP memiliki instance kacang yang dibuat dari belakang definisi kacang tunggalsession
- cakupan definisi kacang tunggal ke siklus hidup Sesi HTTPapplication
- Lingkup definisi kacang tunggal ke siklus hidup aServletContext
sumber