-
[Spring] ContextBack/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