programing

스프링 프레임워크의 applicationContext.xml과 spring-servlet.xml의 차이점

javaba 2022. 8. 3. 22:43
반응형

스프링 프레임워크의 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.xmlspring1,spring2-servlet.xmlspring2를 참조해 주세요.

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>

부팅 시ContextLoaderListenerapplicationContext.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를 확장하다FrameworkServletFrameworkServlet콩 인스턴스화는 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>

부팅 시 " " "ContextLoaderListenerapplicationContext.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

반응형