최범균님의 스프링과 인터넷검색을 기반으로 제가 볼 용도의 글을 쓰는것입니다.
흐음.. 이게 벌써 몇번째 정리인지 모르겠다.
아무튼 스프링책을 다시 보면서 정리하는 중이니 역시 정리하겠다. 스프링 또한 여차 프레임웍처럼 스프링 MVC를 제공한다.
간단하게 정리하자면.. 이 모든것을 총괄하는 커맨드센터격는 DispatcherServlet 이다.
1. 기본흐름
클라이언트 ---- 요청 ----> DispatcherServlet
DispatcherServlet ---- 처리할 컨트롤러 파악 ----> HandlerMapping
DispatcherServlet <---- 처리할 컨트롤러 파악 ---- HandlerMapping
DispatcherServlet ---- 처리요청 ----> Controller
DispatcherServlet <---- ModelAndView 리턴 ---- Controller
DispatcherServlet ---- ModelAndView 결과를 보여줄 View 파악 ----> ViewResolver
DispatcherServlet <---- View 리턴 ---- ViewResolver
DispatcherServlet ---- 결과물 출력요청 ----> View
개발자는 컨트롤러와 클라이언트의 응답결과화면 보여줄 뷰화면을 만드는게 주이다.
보통은 DispatcherServlet , HandlerMapping, ViewResolver 는 기본 클래스를 쓴다.
하여
ㄱ. DispatcherServlet을 web.xml파일에 설정한다.
ㄴ. 컨트롤러를 작성한다.
ㄷ. ViewResolver를 설정한다. 이는 컨트롤러가 전달한 ModelAndView 값을 이용해서 만듬
ㄹ. 뷰 관련 템플릿(jsp etc...) 로 화면을 만든다.
아니면 개발 과정으로 설명하자면
ㄱ. 클라이언트의 요청을 받을 DispaatcherServlet 을 web.xml에 선언한다.
ㄴ. 클라이언트의 요청을 처리할 컨트롤러 클래스를 만든다.
ㄷ. 컨트롤러가 만든 ModelAndView 데이터를 이용해서 View를 처리할 ViewResolver를 설정한다. ( xml)
ㄹ. Velocity 나 JSP로 뷰를 작성한다.
2. DispatcherServlet 설정
web.xml을 설정하는 과정이다.
/WEB-INF/web.xml
서블릿과 서블릿 맵핑 정보를 추가하면됨
// *.do로 들어오는 클라이언트요청을 dispatcher에서 처리함
DispatcherServlet은 WEB-INF/ 디렉토리에 위치한 [서블릿이름]-servlet.xml 파일을 스프링 설정파일로 사용한다.
위의 경우 dispatcher 이므로 dispatcher-servlet.xml 파일을 설정파일로 사용한다.
해당 설정파일에는 Controller,ViewResolver,View 등의 빈을 설정한다.
3. Controller 구현
컨트롤러를 구현하려면 @Controller 어노테이션 을 해당 클래스에 적용한다.
@RequestMapping 어노테이션을 이용하면, 클라이언틔 요청을 처리할 메소드를 지정할 수 있다.
....
}
스프링 MVC는 ModelAndView 말고도 String,Map 등과 같은 타입을 이용해서 뷰이름과,정보를 보낼 수 있다.
당연히 해당 컨트롤러를 DispatcherServlet에서 찾을 수 있도록 스프링 컨테이너의 빈 으로 등록해주어야한다.
스프링 2.5에서는 컨트롤러 어노테이션에 대해서 추가 작업이 필요하나 3.0에서는 변경되었다.
ViewResolver를 사용한다. 스프링은 여러 벨로시티등의 여러가지 뷰 구현체를 지원하는데 jsp 를 사용할경우
in [서블릿이름]-servlet.xml 파일안에
// ViewResolver 가 /WEB-INF/view/뷰이름.jsp 를 뷰 JSP로 사용. 위의 컨트롤러에서 view 이름을 hello로 잡았으므로 실제 리턴하는 파일은
// /WEB-INF/view/hello.jsp 파일이다. 즉 [prefix]뷰이름[suffix] 가 된다.
이제 호출하면된다.
http://localhost:8080/hello.html
자.. 그럼 다시 살펴보면 우선 web.xml에 DispatcherServlet 과 Mapping 설정을 해두었다.
사용자가 특정 url 요청을 하게 되면 Mapping 해두었던 설정에 따라 어떤 dispatcherServlet을 쓸지 확인하고 해당 dispatcherSerlvet 의 설정파일 [dispatcherServlet]-servlet.xml 파일을 읽어서 요청에 맞는 url 패턴을 가진 컨트롤러를 등록된 빈 에서 찾는다.
찾았으면 해당 컨트롤러에 가서 정의된 @RequestMapping 어노테이션중 맞는것을 찾아서 ModelAndView 를 만들고, 리턴한다.
그러면 이를 처리할 ViewResolver 를 찾아야 하는데 그건 [dispatcherServlet이름]-serlvet.xml 파일에 정의된 viewResolver 를 사용해서
prefix/suffix를 이용한 url을 만든다. 사용자의 눈에는 그 url 이 보이진 않는다. viewResolver가 view를 찾아서 그걸 보여주기만 할뿐 주소의 변경은 없다.
해서 요청 url 패턴이 html 이었다면 .html로 요청한 주소는 그대로이고, viewResolver 에서 만든 주소(by prefix,suffix) 의 대상이 실제 보이게 된다.
'IT > 스프링' 카테고리의 다른 글
filter.... (0) | 2012.01.10 |
---|---|
DispatcherServlet... more (0) | 2012.01.10 |
AspectJ in Spring? (0) | 2012.01.09 |
weaving?? (0) | 2012.01.09 |
Pointcut 표현식... execution , within (0) | 2012.01.06 |