웹브라우저를 통해 클라이언트의 요청이 들어오면 무조건 맨 처음 DisptcherServlet에서 요청을 받는다.
HandlerMapping에게 작업을 보낸다.
HandlerAdapter에게도 보낸다.
Controller에게도 보낸다.
ViewResolver에게도 보낸다.
View에게도 보낸다
우리가 작업을 많이 할 부분은 Controller, View, Model이고 나머지 부분은 Sprring에서 거의 자동으로 다루어준다.
요청이 들어오면 DispatcherServlet 이 먼저 받고, Controller에게 요청을 한다. Controller에서 다시 DispatcherServlet으로 뭔가 응답을 준다. 그러면 DispatcherServlet에서 ViewResolver를 통해 View에 호출이 된다. 그러면 사용자에게 응답이 이루어 진다.
1. File -> New -> Spring Legacy Project -> Spring MVC Project 선택
Spring Tool 에서 보이는 이름
3번쨰는 이름이 프로젝트의 Context name이 된다.(중요!)
생성된 프로젝트 구조
|
① Web.xml에서 /으로 요청이 들어오면 org.springframework.web.servlet.DispatcherServlet으로 보내라고 했으나, 스프링 프레임워크의 클래스이기 때문에 내가 신경쓸 일이 없다. DispatcherServlet는 작업이 끝난 후 알아서 Controller로 보낸다.
② Servlet-context.xml의 <context:component-scan base-package="com.ch.aca"/>에
명시된 com.ch.aca 패키지에 @Controller라고 명시된 클래스만 Controller로 본다.
Resources 폴더
우리가 웹사이트를 만들다 보면 이미지도 있을 수 있고, js이나 css도 있을 수 있다. 그런 것들은 어떻게 들어가는지 살펴보자.
우선 이미지를 예제로 본다
(1) 이미지를 webapp아래의 resources폴더에 이미지를 copy해서 넣고, home.jsp에 “<p> <img src="/aca/resources/h.jpg"></p>”추가하고 실행하면 이미지가 보인다.
(2) webapp아래에 img라는 폴더를 만들고 이미지를 copy해서 넣고 home.jsp에 “<p> <img src="/ch08_1/img/h.jpg"></p>” 추가하고 실행하면 이미지가 보이지 않는다. 다음과 같은 순서에 따라 이미지가 보이도록 해야 보일 수 있다.
① web.xml에 있듯이, '/'가 들어오면 DispatcherServlet으로 보내고 그 DispatcherServlet은 컨트롤러로 보낸다.
② 컨트롤러를 찾는 것은 servlet-context.xml에 나온 패키지 중 @Controller라는 어노테이션이 있는 곳을 컨트롤러로 본다.
③ 그안의 @requestMapping(요청을 매핑하는 어노테이션)대로 메소드를 수행하고 "home"을 뷰의 이름으로 리턴.
④ servlet-context.xml의 prefix와 surfix로 뷰의 경로로 찾아가 실행한다.
⑤ "/"로 시작하는 경우, 요청이 들어온 건 DispatcherServlet이 가로채라라고 했으므로, DispatcherServlet에서 컨트롤러에게 보낸다. 그러나, 제외시키는 코드가 servlet-context.xml에 명시해 놓는다.
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/img/**" location="/img/" />
⑥ 위의 코드에 의해 /resources/로 시작하는 것과 /img/로 시작하는 것은 경로 그대로 읽게 한다
'Spring' 카테고리의 다른 글
Spring 외부파일을 이용한 설정 (0) | 2017.07.31 |
---|---|
자바 Spring 개요 (0) | 2017.07.31 |