- Czy są
applicationContext.xml
ispring-servlet.xml
jakkolwiek powiązane w Spring Framework? - Czy zadeklarowane pliki właściwości
applicationContext.xml
będą dostępne dlaDispatcherServlet
? - W powiązanej notatce, dlaczego w ogóle potrzebuję
*-servlet.xml
? DlaczegoapplicationContext.xml
sam jest niewystarczający?
373
Odpowiedzi:
Wiosna pozwala zdefiniować wiele kontekstów w hierarchii rodzic-dziecko.
applicationContext.xml
Definiuje fasolę do „korzeni kontekście webapp”, czyli kontekstu związanego z webapp.spring-servlet.xml
(Lub czegokolwiek innego, co nazwać) definiuje fasolę dla jednego serwletu app kontekście. Może być ich wiele w aplikacji internetowej, po jednej na serwlet Spring (np.spring1-servlet.xml
Dla serwletuspring1
,spring2-servlet.xml
dla serwletuspring2
).Fasola
spring-servlet.xml
może odnosić się do fasoliapplicationContext.xml
, ale nie odwrotnie.Wszystkie kontrolery Spring MVC muszą działać w
spring-servlet.xml
kontekście.W najprostszych przypadkach
applicationContext.xml
kontekst jest niepotrzebny. Zasadniczo jest używany do przechowywania komponentów bean, które są wspólne dla wszystkich serwletów w aplikacji internetowej. Jeśli masz tylko jeden serwlet, to nie ma większego sensu, chyba że masz do niego określone zastosowanie.źródło
Scenariusz 1
W aplikacji klienckiej (aplikacja nie jest aplikacją internetową, np. Może być aplikacją swing)
Nie ma potrzeby pliku web.xml . ApplicationContext jako kontener umożliwiający uzyskanie usługi bean. Nie ma potrzeby kontenera serwera WWW. W test-client.xml może być Prosta fasola bez zdalnego, fasola z pilotem.
Wniosek : w scenariuszu 1 aplikacjaContext i
DispatcherServlet
nie są powiązane.Scenariusz 2
W aplikacji serwerowej (aplikacja wdrożona na serwerze np. Tomcat). Dostęp do usługi poprzez zdalne sterowanie z programu klienckiego (np. Aplikacja Swing)
Zdefiniuj detektor w pliku web.xml
Podczas uruchamiania serwera tworzy
ContextLoaderListener
instancję komponentów bean zdefiniowanych w applicationContext.xml .Zakładając, że w pliku applicationContext.xml zdefiniowano następujące elementy :
Ziarna tworzone są ze wszystkich czterech plików konfiguracyjnych test1.xml , test2.xml , test3.xml , test4.xml .
Wniosek : w scenariuszu 2 ApplicationContext i
DispatcherServlet
nie są powiązane.Scenariusz 3
W aplikacji internetowej ze sprężyną MVC.
W pliku web.xml zdefiniuj:
Po uruchomieniu Tomcat tworzone są instancje ziaren zdefiniowanych w pliku springweb-servlet.xml .
DispatcherServlet
rozszerza sięFrameworkServlet
. WFrameworkServlet
instancji fasoli zachodzi tworzenie Springweb. W naszym przypadku springweb to FrameworkServlet.Wniosek : w scenariuszu 3 aplikacjiContext i
DispatcherServlet
nie są powiązane.Scenariusz 4
W aplikacji internetowej ze sprężyną MVC. springweb-servlet.xml dla serwletu i applicationContext.xml do uzyskiwania dostępu do usługi biznesowej w programie serwera lub do uzyskiwania dostępu do usługi DB w innym programie serwera.
W pliku web.xml zdefiniowano:
Podczas uruchamiania serwera tworzy
ContextLoaderListener
instancję komponentów bean zdefiniowanych w applicationContext.xml ; zakładając, że zadeklarowałeś tutaj:Wszystkie instancje są tworzone z wszystkich czterech test1.xml , test2.xml , test3.xml , test4.xml . Po zakończeniu fasoli instancji określonej w applicationContext.xml , ziarna określono w springweb-servlet.xml są wystąpienia.
Kolejność tworzenia instancji to: root (kontekst aplikacji), a następnie FrameworkServlet.
Teraz powinno być jasne, dlaczego są one ważne w jakim scenariuszu.
źródło
DispatcherServlet
nie zadzwoni, jeśli adres URL nie kończy się na .action?Jeszcze jeden punkt, który chcę dodać. W
spring-servlet.xml
zaliczamy skanowanie składnik pakietu sterownika. W poniższym przykładzie dołączamy adnotację filtru dla pakietu kontrolera.W
applicationcontext.xml
dodajemy filtr dla pozostałego pakietu oprócz kontrolera.źródło
@Controller
ziarna w kontekście serwletu (wymagane przez Spring MVC).W prostych słowach
applicationContext.xml
definiuje komponenty bean, które są współużytkowane przez wszystkie serwlety. Jeśli twoja aplikacja ma więcej niż jeden serwlet,applicationContext.xml
bardziej sensowne byłoby zdefiniowanie wspólnych zasobów .spring-servlet.xml
definiuje komponenty bean, które są powiązane tylko z tym serwletem. Oto serwlet dyspozytora. Zatem kontrolery Spring MVC muszą być zdefiniowane w tym pliku.Nie ma nic złego w definiowaniu wszystkich komponentów bean,
spring-servlet.xml
jeśli używasz tylko jednego serwletu w aplikacji internetowej.źródło
W technologii serwletów, jeśli chcesz przekazać dane wejściowe do konkretnego serwletu, musisz przekazać parametr init jak poniżej.
Jeśli chcesz przekazać część, która jest wspólna dla wszystkich serwletów, musisz skonfigurować parametry kontekstu. Przykład
Tak więc dokładnie tak, jak kiedykolwiek, kiedy pracujemy z Spring MVC, musimy podać pewne informacje do predefiniowanego serwletu dostarczonego przez Spring, czyli DispatcherServlet poprzez parametr początkowy. Tak więc konfiguracja jest następująca, tutaj dostarczamy plik spring-servlet.xml jako parametr init dla DispatcherServlet.
Ponownie potrzebujemy param kontekstu. Dotyczy to całej aplikacji. Możemy więc podać kontekst główny, czyli applicationcontext.xml Konfiguracja wygląda następująco:
źródło
Konteksty aplikacji zapewniają sposób rozwiązywania wiadomości tekstowych, w tym obsługę i18n tych wiadomości. Konteksty aplikacji zapewniają ogólny sposób ładowania zasobów plików, takich jak obrazy. Konteksty aplikacji mogą publikować zdarzenia w komponentach bean, które są zarejestrowane jako detektory. Niektóre operacje na kontenerze lub fasoli w kontenerze, które muszą być obsługiwane w sposób zautomatyzowany za pomocą fabryki fasoli, mogą być obsługiwane deklaratywnie w kontekście aplikacji. Obsługa ResourceLoader: Interfejs Resource Springa elastyczna abstrakcja ogólna do obsługi zasobów niskiego poziomu. Sam kontekst aplikacji to ResourceLoader, dlatego zapewnia aplikacji dostęp do instancji zasobów specyficznych dla wdrożenia. Obsługa MessageSource: kontekst aplikacji implementuje MessageSource, interfejs używany do uzyskiwania zlokalizowanych komunikatów,
źródło