본문 바로가기

Wanna be a Programmer/Spring Framework

Spring MVC 구현(Controller, ModelAndView)

Controller


- Controller의 종류

* Controller(interface)

* AbstractController

* MultiActionController

- 위의 interfact / class를 상속하여 Controller 작성한다.

- 컨트롤러는 처리 결과를 ModelAndView에 담아 Dispatcher에 전달


AbstractController

가장 기본이 되는 Controller

- 작성

* AbstractController 상속한다.

* public ModelAndView handdlerRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception 오버라이딩하여 코드 구현

* ModelAndView에 view가 사용할 객체와 view에 대한 id 값을 넣어 생성 후 리턴


* ModelAndVie를 통해 view(/WebContent/jsp/res/response.jsp)로 수행 넘김


MultiActionController

- 하나의 Controller에서 여러 개의 요청 처리 지원

  (연관된 request를 하나의 controller로 묶을 경우 사용)

- 작성

* MultiActionController 상속

* Client의 요청을 처리할 메소드 구현

public [ ModelAndView | Map | void ] 메소드 이름(HttpServletRequest req, HttpServletResponse res[HttpSession | command]) [throws Exception] {}

@ return type : ModelAndView, Map, Void 중 하나

@ argument : 1번- HttpServletRequest, 2번- HttpServletResponse, 3번- 선택적이며 HttpSession 또는 Command, 4번- Command


* MethodNameResolver 등록

@ 역할 : 어떤 메소드가 클라이언트의 요청을 처리할 것인지 결정

Spring 설정파일에 <bean>으로 등록

@ controller에서는 property로 주입 받는다.

@ 종류

- ParameterMethodNameResolver : parameter로 메소드 이름 전송

- InternalPathMethodNameResolver : url 마지막 경로 메소드 이름으로 사용

- PropertiesMethodNameResolver : url과 메소드 이름 mapping을 property로 설정


Annotation Controller

- @Controller : 컨트롤러에 클래스 표시

- @RequestMapping : 요청 URL 등록, 처리할 요청방식 지정

* RequestMapping("요청 url")


* RequestMappng(value="요청 url" method=요청방식)

* Controller 클래스에 등록

* Controller 메소드에 등록


- Controller 클래스 스프링 설정파일에 등록

1. <bean>을 이용해 등록

2. 자동스캔 : <context:component-scan base-package="package"/>


- Controller 메소드에서 요청 파라미터 처리

1. DTD(Command) 이용

- 요청 파라미터와 매칭되는 이름의 property를 가진 DTD

2. 요청 파라미터 name을 이용한 매개 변수 사용

- 같은 이름으로 여러 개 값이 넘어올 경우 String[] 사용

3. @RequestParam Annotation 사용

- 속성

* value : 요청 파라미터 이름 설정

* required : 필수 여부. 안넘어오면 400오류 발생. 기본 False

* defaultValue : 값이 안넘어 올 경우 설정할 기본 값

QueryString으로 name값을 보내주지 않으면

Controller에서 defaultValue=no name으로 지정한 값이 출력된다.

출력화면


- Controller 메소드 이용가능 매개변수 타입

* HttpServletRequest

* HttpServletResponse

* HttpSession

* 요청 파라미터 연결 변수

* 요청 파라미터 설정할 DTO 객체

* @CookieValue 적용 매개 변수(쿠키 값 매핑)

@CookieValue(value="name", required=false)


* Map, Model, ModelMap - View에 전달할 모델 데이터 설정시 사용



- Controller 메소드 설정 가능 return type

* ModelAndView : view 정보와 응답 데이터 설정

* View에 전달할 값 설정(Map, Model, View는 요청 URL로 결정됨)

* String : View의 이름 리턴

* View 객체

* Void : Controller 메소드 내에서 응답을 직접처리 시 사용


ModelAndView


- Controller 처리 결과 후 응답할 View와 View에 전달할 값을 저장

- 생성자

* ModelAndView(String viewName) : 응답할 view 설정

* ModelAndView(String viewName, Map values) : 응답할 view와 view로 전달할 값들을 저장한 Map 객체

* ModelAndView(String viewName, String name, Object value) :  응답할 view이름, view로 넘길 객체의 name-value

- 주요 메소드

* setViewName(String name) : 응답할 view이름을 설정

* addObject(String name, Object value) : view에 전달할 값을 설정 -> requestScope에 설정됨

* addAllObjects(Map values) : view에 전달할 값을 Map에 name-value로 저장하여 한번에 설정

  -> requestScope에 설정됨

- Redirect 방식 전송

* view 이름에 redirect : 접두어 붙인다. ex) mv.setViewName("redirect:/welcome.html");



'Wanna be a Programmer > Spring Framework' 카테고리의 다른 글

Spring MVC File Upload - view(JSP)  (0) 2012.07.05
Spring MVC File Upload  (1) 2012.07.04
Spring MVC 구현(Dispatcher, HandlerMapping)  (0) 2012.06.27
Spring MVC  (0) 2012.06.27
Annotation(어노테이션)  (0) 2012.06.26