1.실행 구조 파악
1)WebXml.java
부가설명(1) : 스프링 3.1 web.xml 없는 스프링 개발
->스프링 4.0을 쓰고 있지만 기본적인 스프링 구조를 파악 할 겸 부가설명을 정리한다.
(참조사이트 : http://linuxism.tistory.com/1558)
서블릿 3.0을 사용하면 기존에 web.xml을 이용해서 서블릿 컨텍스트를 초기화하던 작업을 여러 파일로 쪼갤 수도 있고, 자바 코드를 이용할 수도 있다.
(자바코드와 web.xml 파일을 같이 사용할 수도 있고, 아예 web.xml 없이 자바코드만으로 초기화 작업을 할 수도 있다.
어차피 web.xml은 ServletContext 오브젝트 초기화하는 데 사용되던 메타정보니까 직접 ServletContext를 다루면 되는 것이겠지.)
부가설명(2)
위 1)의 Servlet-Context(.xml) 설정을 파악해봅니다.
일단 무엇을 설정 하는 파일인지 파일내 있는 영문 주석된 내용을 정리합니다.
(2.1)DispatcherServlet로 설정된 서블릿의 요청 처리 기반을 정의합니다.
(2.2)Spring MVC 패턴의 @Controller 프로그래밍 모델을 활성화 합니다. ( 어노테이션 사용이 가능)
(2.3)servlet의 url-pattern를 root( / )를 가져가는 url 패턴으로 사용한다면 확장자에 관계 없이 모든 요청에 대한 구분을 Dispatcherservlet이 통제 하려고 하기 때문에 css, js, img 파일등 처리도 모두 매핑해줘야 합니다.
그래서 번거러움을 없애기 위해서 DispatcherServlet이 특정폴더를 제외한 나머지만을 통제하게끔 설정하는 겁니다.
css, js, img 파일등 resources 폴더에 넣어 관리해준다.
<resources mapping="/resources/**" location="/resources/" />
(2.4)ViewResolver 설정을 한다. jsp와 name을 매핑시켜주는 역할을 합니다.
<beans:bean class="org.springframework.web.servlet.view.InternalresourceViewresolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
(2.5)com.exam.mod 하위 모든 패키지에 있는 파일의 어노테이션을 스캔해서 빈으로 등록하겠다는 것입니다.
<context:component-scan base-package="com.exam.mod" />
2) implements WebApplicationInitializer
3)onStartup(ServletContext serveltContext)
// 스프링 설정
XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
rootContext.setConfigLocations(new String[] { "classpath:config/spring/context-*.xml" });
rootContext.refresh();
rootContext.start();
GlobalsProperties globalsProperties = rootContext.getBean("globalsProperties", GlobalsProperties.class);
String serverType = StringUtils.defaultString(globalsProperties.getProperty("server.type"), "local");
String logoutUrl = StringUtils.defaultString(globalsProperties.getProperty("page.logout.url"), "");
// 스프링 MVC 설정
XmlWebApplicationContext xmlWebApplicationContext = new XmlWebApplicationContext();
xmlWebApplicationContext.setConfigLocation("classpath:config/spring/servlet-mvc.xml");
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(xmlWebApplicationContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
4)servlet-mvc.xml
...
<context:component-scan base-package="com.el" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="assignable" expression="com.el.eco.admin.common.WebControllerAdvice" />
<!-- <context:exclude-filter type="assignable" expression="com.el.core.framework.web.controller.ControllerAdvice" /> -->
</context:component-scan>
<mvc:resources mapping="/resources/**" location="/resources/" />
<mvc:interceptors>
<!-- 공통 인터셉터 -->
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/resources/**" />
<bean class="com.el.core.framework.web.interceptor.ApplicationInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
...
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="3" />
<property name="prefix" value="/WEB-INF/jsp/view/"/>
<property name="suffix" value=".jsp"/>
<property name="requestContextAttribute" value="rc"/>
</bean>
<aop:aspectj-autoproxy />
<aop:config proxy-target-class="true">
//인터페이스를 구현하지 않은 타깃 클래스에 AOP를 적용하기위해쓰는 설정입니다.
<aop:aspect id="aspectLoggging" ref="loggingAspect">
<aop:pointcut id="controllerPointcut" expression="execution(* com.el..*Act.*(..))" />
<aop:around method="controllerAround" pointcut-ref="controllerPointcut" />
</aop:aspect>