BLOG ARTICLE sring mvc 구성요소 | 1 ARTICLE FOUND

  1. 2011.07.27 [Spring] MVC Pattern 으로 프로젝트 시작하기(Spring MVC 주요흐름) (3)

스프링 MVC의 주요 구성 요소

DispatcherServlet : 클라이언트의 요청을 전달받는다. 컨트롤러에게 클라이언트의 요청을 전달하고,

                            컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다.

HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지를 결정한다.

Controller(컨트롤러) : 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다.
                               스트럿츠의 Action과 동일한 역할을 수행한다.

ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.

ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정한다.

View(뷰) : 컨트롤러의 처리 결과 화면을 생성한다. JSP나 Velocity템플릿 파일 등을 뷰로 사용한다.




스프링 MVC 구성요소들의 처리흐름


위 그림을 글로 풀어보면

1. 클라이언트 요청이 DispatcherServlet 에 전달된다.

2. DispatcherServlet 은 HandlerMapping 을 사용하여 클라이언트의 요청을 처리할 컨트롤러 객체를 구한다.

3. DispatcherServlet 은 컨트롤러 객체를 이용해서 클라이언트의 요청을 처리한다.

4. 컨트롤러는 클라이언트의 요청 어리 결과 정보를 담은 ModelAndView 객체를 리턴한다.

5. DispatcherServlet 은 ViewResolver 로부터 응답 결과를 생성할 뷰 객체를 구한다.

6. 뷰는 클라이언트에 전송할 응답을 생성한다.



위 과정에서 개발자가 직접 개발해야 할 부분은 클라이언트의 요청을 처리할 컨트롤러와 클라이언트에 응답 결과 화면을 전송할 

JSP 나 Velocity 템플릿 등의 뷰 코드
이다.

나머지, DispatcherServlet 이나 HandlerMapping, ViewResolver 등은 스프링이 기본적으로 제공하는
구현클래스를 사용하게 된다.




위 스프링 MVC 구성요소들과, 처리흐름을 바탕으로 web.xml , dispatcher-servlet.xml, cotroller.java 작성법을 기본적으로
진행해보자.

일단 web.xml 을 설정해야한다.

<servlet>
  
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  
  </servlet>
  
  <servlet-mapping>
 
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>*.do</url-pattern>
  
  </servlet-mapping>

  
*.do 로 요청되는 모든 요청은 dispatcher 라는 이름으로 등록된

org.springframework.web.servlet.DispatcherServlet 서블릿이 하겠다고 지정한다.

여기서 주의할점은 dispatcher 라고 쓰겠다고 정했으므로

DispatcherServlet 이 참조해야되는 설정 파일은 WEB-INF/ 에 위치한 [서블릿이름]-servlet.xml 이다. 

그래서 여기서 만들어야될 설정파일 이름은

반드시 dispatcher-servlet.xml 이 되야된다. 앞대가리가 바로 정의한 이름이다.

필요한 자르 파일들은 구현하는 목적에 다르지만, 

현재 예제에 필요하고 향후 잘쓰이게되는 라이브러리 파일은 페이지 아래쪽에 첨부하겠습니다. 





이제 dispatcher-servlet.xml 파일을 작성합니다.

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
       
<bean id="helloController" class="Spring.HelloController"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>       
</beans>

                 

DispatcherServlet 은 스프링 컨테이너에서 컨트롤러 객체를 검색하기 때문에

스프링 설정 파일에 컨트롤러를 빈으로 등록해 주어야 합니다.

위 코드에서 class="Spring.HelloController" 

Spring 패키지안의 HelloController.java 파일이 요청을 실제 처리하는 코드가 들어있는

컨트롤러 파일입니다. 


그 아래 viewResolver 라고 정의되있는 것은 컨트롤러의 결과값으로 어떤 뷰페이지를 어떻게 보여줄지 

설정하는 구문입니다.

<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>

prefix 는 결과값중 setViewName("결과페이지이름");

으로 담겨오는 결과페이지 이름앞뒤에 붙여서 포워딩 시킬 이름을 완성시키는 겁니다.

저코드에 따르면   "컨테스트주소/결과페이지이름.jsp" 라고 생성되어져서,

포워딩 되게됩니다.







그럼이제 컨트롤러 파일을 작성합니다. 순서상보면 컨트롤러를 먼저 코딩하는게 맞는거같습니다.

 HelloController.java
package Spring;

import java.util.Calendar;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

	@RequestMapping("/hello.do")
	public ModelAndView hello(){
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("hello");
		
		mav.addObject("greeting", getGreeting());
		
		
		return mav;
	} //hello() end;
	
	
	
	public String getGreeting(){
		
		int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
		
		if(hour >= 6 && hour <= 10){
			
			return "굿모닝~~~~~~";
			
		} else if(hour >= 12 && hour <= 15){
			
			return "점심 드셨음?";
			
		} else if(hour >= 18 && hour <= 22){
			
			return "굿 밤";
			
		} // end if;
		
		
		return "하이~~~~~~~~~~";
	}
}


컨트롤러를 구현하려면 먼저 @Controller 어노테이션을 클래스에 적용합니다.

그리고 @RequestMapping 어노테이션을 이용해서 클라이언트의 요청을 처리할 메서드를 지정합니다.

9라인의 @Controller 어노테이션은 해당 클래스가 스프링 MVC의 컨트롤러를 구현한 클래스라는 것을 지정합니다.

또한 @RequestMapping("/브라우저요청값") 어노테이션은 값으로 지정한   컨텍스트이후의 요청경로를 처리할 메소드를

지정하는 것입니다. 여기서는 "/hello.do" 라고 지정했는데 이 경우에는 'http://localhost:8080/Spring_BBS/hello.do'

요청을 HelloController.java 의 hello() 메소드가 처리하게됩니다.


15라인에서 ModelAndView 를 생성하고 있는데, 이것은 컨트롤러의 처리결과를 보여줄 뷰와 뷰에서 출력할 모델을

지정할 때 사용됩니다. 사용할 뷰 이름으로 "hello" 를 사용 했고, 모델에 "greeting"이라는 이름으로 String 타입의 값을 추가하였습니다.

뷰이름은 위에서 언급했듯이 prefix 값과 suffix값을 앞뒤로 붙여서, 포워드합니다.



hello.jsp 파일에서 EL 태그로 간단하게 출력할수있습니다. 





아래는 WEB-INF/lib 폴더에 들어가야할 Spring jar 파일들입니다.






  
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 초보개발자 2012.07.10 20:03 신고  댓글주소  수정/삭제  댓글쓰기

    이런 유용한 정보에! 코멘트가 없다니요! 감사히 잘 배우고 갑니다~ 즐겨찾기해놓고 공부하러 또 올게요^^ 감사합니다

  2. 오픈 2014.05.29 14:30 신고  댓글주소  수정/삭제  댓글쓰기

    잘보고 많이 배우고 갑니다. 감사합니다.