Jaka jest różnica między kontekstem aplikacji a kontekstem aplikacji sieci Web?
Wiem, że WebApplicationContext
jest używany w aplikacjach zorientowanych na architekturę Spring MVC?
Chcę wiedzieć, do czego służy ApplicationContext
aplikacje MVC? A w jakim rodzaju fasoli są zdefiniowane ApplicationContext
?
spring
spring-mvc
applicationcontext
Sumit Trehan
źródło
źródło
web.xml
pliku; to pytanie dotyczy niektórych klas wiosennych.web.xml
ale chodzi o warianty konfiguracji komponentu bean Spring XMLApplicationContext
iWebApplicationContext
. Wszystkie definicje fasoli wapplicationContext.xml
będą dostępne,ApplicationContext
podczas gdy wszystkie definicje fasoli w*-servlet.xml
będą dostępne wWebApplicationContext
.Odpowiedzi:
Kontekst aplikacji sieciowej Rozszerzony kontekst aplikacji, który został zaprojektowany do pracy ze standardowym javax.servlet.ServletContext, aby mógł komunikować się z kontenerem.
Fasole, tworzone w WebApplicationContext, będą mogły także korzystać z ServletContext, jeśli zaimplementują interfejs ServletContextAware
Istnieje wiele rzeczy, które można zrobić z instancją ServletContext, na przykład dostęp do zasobów WEB-INF (konfiguracje xml itp.) Poprzez wywołanie metody getResourceAsStream (). Zazwyczaj wszystkie konteksty aplikacji zdefiniowane w pliku web.xml w aplikacji wiosny serwletu są kontekstami aplikacji sieci Web, dotyczy to zarówno głównego kontekstu aplikacji internetowej, jak i kontekstu aplikacji serwletu.
Ponadto, w zależności od kontekstu aplikacji sieciowej, jej testowanie może być nieco trudniejsze, a do testowania może być konieczne użycie klasy MockServletContext .
Różnica między serwletem a kontekstem głównym Wiosna pozwala budować wielopoziomowe hierarchie kontekstów aplikacji, więc wymagana fasola zostanie pobrana z kontekstu nadrzędnego, jeśli nie będzie obecna w bieżącym kontekście aplikacji. W aplikacjach internetowych domyślnie istnieją dwa poziomy hierarchii, kontekstów korzeniowe i serwletów: .
Umożliwia to uruchamianie niektórych usług jako singletonów dla całej aplikacji (zwykle znajdują się tutaj komponenty bean Spring Security i podstawowe usługi dostępu do bazy danych), a inne jako oddzielne usługi w odpowiednich serwletach, aby uniknąć konfliktów nazw między komponentami bean. Na przykład jeden kontekst serwletu będzie obsługiwał strony internetowe, a inny zaimplementuje bezpaństwową usługę internetową.
Ta dwupoziomowa separacja pojawia się po wyjęciu z pudełka podczas korzystania z wiosennych klas serwletów: aby skonfigurować kontekst aplikacji root, należy użyć tagu context-param w pliku web.xml
(kontekst aplikacji root jest tworzony przez ContextLoaderListener, który jest zadeklarowany w pliku web.xml
) i znacznik serwletu dla kontekstów aplikacji serwletu
Pamiętaj, że jeśli parametr init zostanie pominięty, to w tym przykładzie wiosna użyje pliku myservlet-servlet.xml.
Zobacz także: Różnica między applicationContext.xml a spring-servlet.xml w Spring Framework
źródło
Wracając do dni serwletu, plik web.xml może mieć tylko jeden
<context-param>
, więc tylko jeden obiekt kontekstu jest tworzony, gdy serwer ładuje aplikację, a dane w tym kontekście są współużytkowane przez wszystkie zasoby (np. Serwlety i strony JSP). To samo, co posiadanie nazwy sterownika bazy danych w kontekście, który się nie zmieni. Podobnie, kiedy deklarujemy parametr contextConfigLocation na<contex-param>
wiosnę, tworzy jeden obiekt kontekstu aplikacji.W aplikacji możesz mieć wiele serwletów. Na przykład możesz chcieć obsługiwać / zabezpieczyć / * żądania w jeden sposób i / non-seucre / * w inny sposób. Dla każdego z tych serwletów możesz mieć obiekt kontekstowy, którym jest WebApplicationContext.
źródło
Odpowiedź została zaakceptowana, ale istnieje oficjalne wyjaśnienie:
Nawiasem mówiąc serwletów i korzeniowe kontekst są zarówno webApplicationContext:
źródło
ApplicationContext (Root Application Context): Każda aplikacja sieciowa Spring MVC ma plik applicationContext.xml, który jest skonfigurowany jako katalog główny konfiguracji kontekstowej. Spring ładuje ten plik i tworzy kontekst aplikacji dla całej aplikacji. Ten plik jest ładowany przez ContextLoaderListener, który jest skonfigurowany jako parametr kontekstowy w pliku web.xml. I będzie tylko jedna aplikacja Kontekst na aplikację internetową.
WebApplicationContext: WebApplicationContext jest kontekstem aplikacji obsługującym sieć, tzn. Zawiera informacje o kontekście serwletu. Pojedyncza aplikacja internetowa może mieć wiele WebApplicationContext, a każdy serwlet Dispatcher (który jest frontowym kontrolerem architektury Spring MVC) jest powiązany z WebApplicationContext. Plik konfiguracyjny webApplicationContext * -servlet.xml jest specyficzny dla DispatcherServlet. Ponieważ aplikacja sieci Web może mieć więcej niż jeden serwlet programu rozsyłającego skonfigurowany do obsługi wielu żądań, na aplikację internetową może przypadać więcej niż jeden plik webApplicationContext.
źródło
Kontekst aplikacji sieci Web określony przez
WebApplicationContext
interfejs jest kontekstem aplikacji Spring dla aplikacji sieci web. Ma wszystkie właściwości zwykłego kontekstu aplikacji Spring, biorąc pod uwagę, żeWebApplicationContext
interfejs rozszerzaApplicationContext
interfejs i dodaje metodę pobierania standardowego interfejsu API serwletuServletContext
dla aplikacji sieci web.Oprócz standardowych zasięgów fasoli wiosennej
singleton
orazprototype
w kontekście aplikacji internetowej dostępne są trzy dodatkowe zakresy:request
- określa definicję pojedynczego komponentu bean do cyklu życia pojedynczego żądania HTTP; to znaczy każde żądanie HTTP ma własną instancję komponentu bean utworzonego na podstawie definicji pojedynczego komponentu beansession
- określa definicję pojedynczego komponentu bean do cyklu życia sesji HTTPapplication
- obejmuje definicję pojedynczej fasoli w cyklu życiaServletContext
źródło