디지털 양피지/WebJava2016. 5. 20. 11:27

Spring MVC


Servlet Contain는 web.xml을 로딩해서 Dispatcher Servlet을 실행한다. Dispatcher Servlet은 init을 통해Sprint container를 통해 나머지 객체를을 생성한다. 최초의 .do 요청이 오는 순간 Spring Container를 구동시킨다. XmlWebApplicationContext가 WEB-INF 아래 action-servlet.xml을 통해 Init 한다.




아래와 같이 설정 파일을 만들어 추가하면 된다.

이제는 파일을 읽었지만 필요한 객체를 로딩하지는 못한 상황이다.


이 위치는 아래와 같이 변경할 수도 있다.

.



Annotation 기반의 Sprint MVC 구현


Controller와 RequestMapping으로 Component를 등록하고 요청에대한 Mapping을 처리할 수 있다.


이경우 Request를 받지 않고 BoardVO와 같은 vo를 받을 수도 있다. Spring은 내부적으로 setter injection을 수행하기 때문이다. 따라서 VO의 Sertter를 JSP의 입력값 등과 같도록 설정해야 한다.


다음과 같이 최소 입력으로 페이지를 만들수도 있다.



Sprint Container는 여러개 구동이 가능하다. 프리젠테이션 레이어와 비지니스 레이어 각각 따로 컨테이너를 생성한다. 비지니스 레이어의 컨테이너는 리스너를 등록해서 먼저(pre-loading) 컨테이너를 생성하고 프리젠테이션 레이어의 컨테이너는 xxx.do가 시작할때 lazy loading 된다.


web.xml에 다음과 같이 프리젠테이션 레이어를 위한 설정 파일을 등록 한다. 


리스너 태그를 통해 ContextLoaderListner를 등록하고 classpath: 안에 applicationContext.xml을 읽어 비지니스 레이어의 객체들을 먼저 pre-loading 한다. 서버를 실행하면 아래와 같이 Servlet Container가 싱행 된 후 listener에 의해 WebApplicationContext가 생성 되면서 applicationContext.xml을 읽는다.

applicationContext.xml에는 아래와 같이 com.multicampus.biz를 먼저 로딩한다.


이후 아래와 같이 DispatcherServlet은 *.do가 들어오면 그때 프리젠테이션 레이어의 controller들을 로딩한다.

아래와 같이 presentation-layer.xml에 있는 controller들을 등록하게 된다.


presentation-layer.xml에는 아래 처럼 view를 scan하여 객체를 container에 등록한다.



아래 그림에서 0번은 서버 실행이라 보면 제일 먼저 Servlet Container Engine 이 실행이 되고 이때 listener에 의해 applicationContext.xml에 있는 Business Components들을 로딩하게 된다. 즉, Business Component 쪽은 pre-loading상태가 되는것이다. 이후 Client로 부터 1번의 요청이 오게 되면 Dispatcher Servlet Container를 생성하게 된다. (두번째 Spring Container가 생성 되는 것이다.) Dispatcher Servlet은 init을 통해 presentation-layer.xml을 읽어 Presentation view들의 handler Mapper, Controller 등을 생성한 후 요청을 처리하게 된다.(lazy-loading)

Posted by 빨간 양말