ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Context
    Back/Spring 2020. 2. 8. 04:12

    Root WebApplicationContext 
    - ContextLoaderListener에 의해 ServeletContext에 등록되는 ApplicationContext
    - service layer, repository layer bean 설정  
    - 공동으로 사용할 빈들을 선언. (Servlet들의 공용 영역)

    Servlet WebApplicationContext 
    - DispatcherServlet에 의해 생성되는 ApplicationContext. (해당 DispatcherServlet에서만 사용가능)

    - Root WebApplicationContext을 상속받음
    - client 요청을 받는 서블릿의 context 설정
    - controller 매핑설정(handler), view resolver 처리


    1) web.xml + xml context

     

    <!-- root context -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/*-context.xml</param-value>
    </context-param>
    
    <!-- dispatcherServlet context -->
    <servlet>
        <servlet-name>normal-webapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/normal/*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>normal-webapp</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
    

    **  생략가능. 생략시 기본값 "dispatcher-servlet.xml"

     

    2) web.xml + java context

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>org.baeldung.bean.config</param-value>
    </context-param>
    
    <servlet>
        <servlet-name>normal-webapp-annotations</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.baeldung.contexts.config.NormalWebAppConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>..</servlet-mapping>

    ** ~Config.class로 넣어도 되지만 패키지 단위로 가능하다

     

    3) 3.x servlet API + xml context

    public class ApplicationInitializer implements WebApplicationInitializer {
         
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
        
            XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
            rootContext.setConfigLocation("/WEB-INF/rootApplicationContext.xml");
     	servletContext.addListener(new ContextLoaderListener(rootContext));
        
        	XmlWebApplicationContext normalWebAppContext = new XmlWebApplicationContext();
    	normalWebAppContext.setConfigLocation("/WEB-INF/normal-webapp-servlet.xml");
    
    	ServletRegistration.Dynamic normal  = servletContext.addServlet("normal", new DispatcherServlet(normalWebAppContext));
    	normal.setLoadOnStartup(1);
    	normal.addMapping("/api/*");
        }
    }

    4) servelt API + java context .. (AbstractContextLoaderInitializer- Lisntener이 포함된 class)

    public class AnnotationsBasedApplicationInitializer extends AbstractDispatcherServletInitializer {
      
        @Override
        protected WebApplicationContext createRootApplicationContext() {
            AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
            rootContext.register(RootApplicationConfig.class);
            return rootContext;
        }
        
        @Override
        protected WebApplicationContext createServletApplicationContext() {
    
            AnnotationConfigWebApplicationContext secureWebAppContext
              = new AnnotationConfigWebApplicationContext();
            secureWebAppContext.register(SecureWebAppConfig.class);
            return secureWebAppContext;
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[] { "/s/api/*" };
        }
    }

    Filter

    - request를 Servlert에, response를 client에 전달하기 전 작업 처리

    Filter- DispatcherServlert - Filter

     

    Listeners

    - Context , Session 이벤트 발생시 작업 처리

    'Back > Spring' 카테고리의 다른 글

    생성자와 @Value  (0) 2020.07.16
    [warn] The type RepositoryRestConfigurerAdapter is deprecated  (0) 2020.03.04
Designed by Tistory.