스프링 프레임워크의 applicationContext.xml과 spring-servlet.xml의 차이점
applicationContext.xml
★★★★★★★★★★★★★★★★★」spring-servlet.xml
스프링 프레임워크에 관련성이 있습니까?- 은 「」로 됩니까?
applicationContext.xml
할 수 있다DispatcherServlet
- 왜 '아주 좋다', '아주 좋다'가요?
*-servlet.xml
? 왜 ??applicationContext.xml
자서서? 츠요시
스프링을 사용하면 부모-자녀 계층에서 여러 콘텍스트를 정의할 수 있습니다.
applicationContext.xml
「root webapp context」(루트 Webapp 컨텍스트).
spring-servlet.xml
(또는 다른 어떤 이름으로 부르든)는 하나의 서블릿 앱 컨텍스트에 대한 빈을 정의합니다.할 수 있습니다( 스프링서블릿 1개).spring1-servlet.xml
spring1
,spring2-servlet.xml
spring2
를 참조해 주세요.
spring-servlet.xml
을 할 수 applicationContext.xml
그
MVC 는 Spring MVC에 .spring-servlet.xml
★★★★★★ 。
「」는, 「」를 나타내고 있습니다.applicationContext.xml
이치노일반적으로 웹 앱의 모든 서블릿 간에 공유되는 콩을 포함하는 데 사용됩니다.서블릿이 1개뿐이라면 특별한 용도가 없는 한 큰 의미가 없습니다.
시나리오 1
클라이언트 어플리케이션(어플리케이션은 웹 어플리케이션이 아닙니다.예를 들어 swing 어플리케이션일 수 있습니다)
private static ApplicationContext context = new ClassPathXmlApplicationContext("test-client.xml");
context.getBean(name);
web.xml은 필요 없습니다.Application Context는 빈 서비스를 받기 위한 컨테이너입니다.웹 서버 컨테이너는 필요 없습니다.test-client.xml에는 리모트를 사용하지 않는 Simple bean, 리모트를 사용하는 bean이 있을 수 있습니다.
결론:시나리오 1에서는 application Context와DispatcherServlet
련이없없 없없없다다
시나리오 2
서버 애플리케이션(서버에 전개된 애플리케이션(예: Tomcat).클라이언트 프로그램(Swing 앱 등)에서 리모트로 서비스 접근
web.xml에서 리스너를 정의합니다.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
부팅 시ContextLoaderListener
는 applicationContext.xml에 정의된 콩을 인스턴스화합니다.
applicationContext.xml에서 다음을 정의했다고 가정합니다.
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
콩은 4개의 컨피규레이션파일 test1.xml, test2.xml, test3.xml, test4.xml에서 인스턴스화 됩니다.
결론:시나리오 2에서는 어플리케이션 컨텍스트와DispatcherServlet
련이없없 없없없다다
시나리오 3
봄 MVC를 사용하는 웹 어플리케이션.
web.xml에서 정의:
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Tomcat이 시작되면 springweb-servlet.xml에 정의된 콩이 인스턴스화됩니다. DispatcherServlet
를 확장하다FrameworkServlet
FrameworkServlet
콩 인스턴스화는 springweb을 위해 발생합니다.이 경우 springweb은 Framework Servlet입니다.
결론:시나리오 3에서는 어플리케이션 컨텍스트와DispatcherServlet
련이없없 없없없다다
시나리오 4
spring MVC. springweb-servlet.xml for servlet 및 applicationContext.xml을 사용하는 웹 응용 프로그램에서 서버 프로그램 내의 비즈니스 서비스에 액세스하거나 다른 서버 프로그램의 DB 서비스에 액세스합니다.
web.xml에는 다음이 정의되어 있습니다.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
부팅 시 " " "ContextLoaderListener
applicationContext.xml에서 정의된 콩을 인스턴스화합니다.여기서 선언한 경우:
<import resource="test1.xml" />
<import resource="test2.xml" />
<import resource="test3.xml" />
<import resource="test4.xml" />
콩은 모두 4개의 test1.xml, test2.xml, test3.xml, test4.xml에서 인스턴스화 됩니다.applicationContext.xml에서 정의된 bean 인스턴스화가 완료되면 springweb-servlet.xml에서 정의된 bean이 인스턴스화 됩니다.
인스턴스화 순서는 루트(어플리케이션콘텍스트), 다음으로 Framework Servlet입니다.
이제 어떤 시나리오에서 그것들이 중요한지를 명확히 해야 합니다.
한 가지 더 덧붙이고 싶은 점이 있습니다. »spring-servlet.xml
컨트롤러 패키지의 컴포넌트 스캔이 포함되어 있습니다.다음 예제에서는 컨트롤러 패키지의 필터 주석을 포함합니다.
<!-- Scans for annotated @Controllers in the classpath -->
<context:component-scan base-package="org.test.web" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
»applicationcontext.xml
컨트롤러를 제외한 나머지 패키지에 필터를 추가합니다.
<context:component-scan base-package="org.test">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
한마디로 말해서
applicationContext.xml
에 모든 서블릿 간에 공유되는 콩을 나타냅니다.의 서블릿이 는, 의 자원을 「」로 공통의 합니다.applicationContext.xml
좀 더 말이 될 것 같아요
spring-servlet.xml
는 그 서블릿에만 관련된 콩을 정의합니다.여기 디스패처 서블릿이 있습니다.봄 MVC.
모든 원두를 정의해도 문제될 것은 없습니다.spring-servlet.xml
웹 응용 프로그램에서 하나의 서블릿만 실행하는 경우.
서블릿 테크놀로지에서는 특정 서블릿에 입력을 전달하려면 아래 코드와 같이 init param을 전달해야 합니다.
<servlet>
<servlet-name>DBController</servlet-name>
<servlet-class>com.test.controller.DBController</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>John</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DBController</servlet-name>
<url-pattern>/DBController</url-pattern>
</servlet-mapping>
모든 서블릿에 공통인 인풋을 전달하려면 컨텍스트 파라미터를 설정해야 합니다.예
<context-param>
<param-name>email</param-name>
<param-value>admin@example.com</param-value>
</context-param>
이와 마찬가지로 Spring MVC를 사용할 때는 Init 파라미터를 통해 Spring에 의해 제공되는 사전 정의된 서블릿(Dispatcher Servlet)에 정보를 제공해야 합니다.따라서 설정은 fallows로 되어 있습니다.여기에서는 DispatcherServlet에 대한 init 파라미터로서 spring-servlet.xml을 제공하고 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Spring MVC App</display-name>
<servlet>
<servlet-name>SpringController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringController</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
다시 컨텍스트 파라미터가 필요합니다.그것은 응용 프로그램 전체에 적용됩니다.따라서 applicationcontext.xml 루트 컨텍스트를 제공할 수 있습니다.설정은 다음과 같습니다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationcontext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>SpringController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringController</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
응용 프로그램콘텍스트는 텍스트메시지의 i18n 지원을 포함한 텍스트메시지를 해결하는 수단을 제공합니다.응용 프로그램콘텍스트는 이미지 등의 파일리소스를 로드하는 일반적인 방법을 제공합니다.애플리케이션 컨텍스트는 리스너로 등록된 콩에 이벤트를 퍼블리시할 수 있습니다.용기 또는 용기 내의 콩에 대해 콩 팩토리와 함께 프로그래밍 방식으로 처리해야 하는 특정 작업은 애플리케이션 컨텍스트에서 선언적으로 처리할 수 있다.Resource Loader 지원: Spring's Resource는 저레벨의 자원을 처리하기 위한 유연한 범용 추상화를 제공합니다.응용 프로그램콘텍스트 자체는 ResourceLoader이므로 응용 프로그램은 배포별 리소스 인스턴스에 액세스할 수 있습니다.MessageSource 지원:응용 프로그램콘텍스트는 현지화된 메시지를 가져오는 데 사용되는 인터페이스인 MessageSource를 구현하며 실제 구현은 플러그 가능
언급URL : https://stackoverflow.com/questions/3652090/difference-between-applicationcontext-xml-and-spring-servlet-xml-in-spring-frame
'programing' 카테고리의 다른 글
GCC를 "cc"로 호출하는 것과 "gcc"로 호출하는 것 (0) | 2022.08.03 |
---|---|
Java 8: Lambda-Streams, 메서드로 필터링(예외 포함) (0) | 2022.08.03 |
128비트 정수 모듈로 64비트 정수를 계산하는 가장 빠른 방법 (0) | 2022.08.03 |
Mockito.any() Generics와의 인터페이스 패스 (0) | 2022.08.03 |
vue-ssr-renderer를 사용하여 웹 팩에서 생성된 Vue SSR 응용 프로그램에 서버 데이터/콘텍스트를 전달하려면 어떻게 해야 합니까? (0) | 2022.08.03 |