MVC 웹 애플리케이션
컨트롤러 및 핸들러 맵핑
@Controller
- Controller의 역할을 수행한다고 명시.
- Controller는 필요한 비즈니스 로직을 호출하여 처리 결과(Model)와 처리 결과를 출력할 View 정보를 DispatcherServlet에 반환한다.
- Bean으로 등록된다.
- @Component의 구체화된 애노테이션으로 클래스에 붙인다.
- 빈 이름을 지정하지 않으면 클래스 이름의 첫 문자를 소문자로 바꾼 것이 빈의 이름(id)으로 빈을 등록한다.
- 형식 @Controller, @Controller("beanName")
@RequestMapping
- 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 매핑하기 위한 애노테이션
url을 class또는 method와 mapping 시켜주는 역할을 한다.
- 선언위치 : 클래스 또는 메소드
1) class level(type level) 매핑 : 컨트롤러의 모든 메소드에서 처리하는 경우
2) method level 매핑 : 요펑 url에 대한 해당 메소드에서 처리하는 경우
- GET, POST, PUT, DELETE 등으로 표현되는 모든 HTTP Request method 를 매핑 할 수 있다.
- @RequestMapping 시 따로 HTTP Method를 설정하지 않으면 모든 Method를 허용한다.
- @RequestMapping 애노테이션은 Ant 스타일의 패턴을 지원한다.
1) ? : 1개의 문자와 매칭
2) * : 0개 이상의 문자와 매칭
3) ** : 0개 이상의 디렉터리와 매칭
4) {spring:[a-z]+} : "spring"이라는 path variable로 정규문법 [a-z]+와 일치
- 상위 클래스에 @RequestMapping이 정의되어 있고 하위 클래스에서는 @RequestMapping을 재정의하지 않은 경우 @RequestMapping는 그대로 상속된다
- 상위 클래스의 클래스에 정의된 @RequestMapping과 하위 클래스의 메소드에 정의된 @RequestMapping의 조합이 가능하다.
- 스프링 4.3부터는 5가지 애노테이션을 추가하여 HTTP 요청 메소드별로 세분화 하였다.
추가된 HTTP 요청 메소드별 매핑 애노테이션
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
@GetMapping("/hello") 은 @RequestMapping(value="/hello", method=RequestMethod.GET)의 축약형이다.
@PostMaoong("/hello") 은@RequestMapping(value="/hello", method=RequestMethod.POST)의 축약형이다.
컨트롤러 메소드의 리턴 타입
1) ModelAndView 객체
- 처리결과를 담은 Model 객체와 View정보를 ModelAndView객체에 담아 반환
- ModelAndView 클래스는 컨트롤러의 처리 결과를 보여줄 뷰와 뷰에 전달할 값을 저장하는 용도로 사용
2) String
- 뷰의 이름을 반환한다.
3) Model, ModelMap
- 처리 결과를 Model 객체에 담아 반환한다.
- Model은 인터페이스이며, ModelMap은 클래스로 사용방법은 유사하다.
- ModelMap 하위 클래스인 ExtendedModelMap은 Model구현 클래스이다.
- 뷰의 이름은 RequestToViewNameTranslator를 통해매핑된 URL로 결정된다.
URL 이 "/hello/main"인 경우 뷰의 잉름은 "hello/main"이 된다.
- Model 객체 생성 예
Model model = ExtendedModelMap();
4) void
- 메소드의 인수로 HttpServletResponse파라미터가 존재하지 않는 경우 뷰의 이름은 RequestToViewNameTranslator를 통해 매핑된 URL로 결정된다. URL이 "/hello/main"인 경우 뷰의 이름은 "hello/main"이 된다.
- HttpServletResponse등을 사용해서 직접 응답을 처리하는 경우 사용할 수 있다.
5) Map
- 처리 결과를 Map 객체에 담아 반환한다.
- 뷰의 이름은 RequestToViewNameTranslator를 통해 매핑된 URL로 결정된다. URL이 "/hello/main"인 경우 뷰의 이름은 "hello/main"이 된다.
6) View
- View 객체를 직접 반환. 해당 View객체를 이용하여 뷰를 생성
- AbstractView 클래스 등을 상속받은 커스텀 뷰를 반환할 수 있다.
- 파일 다운로드, PDF 나Excel로 변환하여 다운로드를 구현할 경우에 사용할 수 있다.
포워딩과 리다이렉트
1) 포워딩(forwarding)
- "forward:"로 시작하는 View이름을 설정하며, forward는 디폴트로 생략 가능하다.
- 컨트롤러 메소드의 리턴 타입이 String인 경우 "bbs/list" 뷰 이름으로 포워딩
return "bbs/list";
- 컨트롤러 메소드의 리턴 타입이 ModelAndView인 경우 "bbs/list" 뷰 이름으로 포워딩
return new ModelAndView("bbs/list");
2) 리다이렉트(Redirect)
- RedirectView
HttpServletResponse의 sendRedirect(location)를 호출해주는 기능을 가진 뷰
실제 뷰가 생성되는 것이 아니라 URL만 만들어져 다른 페이지로 리다이렉트 된다.
모델 정보가 있다면 URL 뒤에 파라미터로 추가된다.
- 리다이렉트 방법
redirect: 로 시작하는 View이름을 설정
1) 컨트롤러 메소드의 리턴 타입이 String인 경우 "/main"으로 리다이렉트
return "redirect:/main";
2) 컨트롤러 메소드의 리턴 타입이 ModelAndView인 경우 "/main"으로 리다이렉트
return new ModelAndView("rediect:/main");
RedirectView 오브젝트를 직접 만들어 반환
return new ModelAndView(new RedirectView("/main") );
컨트롤러 핸들러 메소드의 매개변수
1) Servlet API
- HttpServletRequest, HttpServletResponse, HttpSession
2) java.util.Locale
- DispatcherServlet의 지역정보 리졸버(Locale Resolver)가 결정한 Locale객체
3) java.io.InputStream / java.io.Reader
- request(요쳥 정보) body 영역을 직접 읽어 들이기 위한 InputStream 또는 Reader 객체
4) java.io.OutputStream / java.io.Writer
- response 정보를 직접 보내기 위한 OutputStream 또는 Writer 객체
5) Map, Model, ModelMap
- 뷰에 전달할 모델 데이터 설정
6) 커맨트 객체
- HTTP 요청 파라미터를 저장할 객체
7) RedirectAttrivutes
- 리다이렉트 되는 페이지에 데이터를 전달한다.
- 주요 메소드
(1) addAttribute(String attributeName, Object attributeValue)
- 리다이렉트 되는 URL에 쿼리 스트링으로 데이터를 전달해준다.
- 쿼리 스트링으로 전달되므로 String으로 변환이 가능한 원시타입만 가능하다.
- F5를 눌러 새로고침을 해도 값이 유지된다.
(2) addFlashAttribute(String attributeName, Object attributeValue)
- 리다이렉트 되는 페이지에 데이터를 전달하며, 주소 뒤에 표시되지 않는다.
- 세션을 이용하여 값을 전달 후에 삭제된다. 즉, 일회성으로 F5를 눌러 새로고침을 하면 값이 사라진다.
8) SessionStatus
- @SessionAttributes 애노테이션을 사용하여 session에 저장된 데이터를 정리하는데 활용하는 인터페이스
- SessionStatus의 setComplete() 메소드를 호출하면 현재 컨트롤러에서 @SessionAttributes에 의해 세션에 저장된 모델 데이터를 모두 삭제한다.
9) Errors, BindingResult
- Errors는 유효성 검증 결과를 저장할 때 사용
- Errors의 하위 인터페이스로 폼 값을 커맨드 객체에 바인딩한 결과를 저장하고 에러코드로 메세지를 가져온다.
'쌍용강북교육센터 > 11월' 카테고리의 다른 글
1118_Spring : RESTful 예제 @PathVariable (0) | 2021.11.21 |
---|---|
1118_Spring : MVC 웹 애플리케이션 (2) (0) | 2021.11.21 |
1117_Spring : Spring Web MVC(Model View Controller) (0) | 2021.11.21 |
1117_Spring : 애노테이션을 이용한 객체간 의존 관계 설정 (0) | 2021.11.17 |
1116_Spring : IoC(Inversion Of Control) 컨테이너 (0) | 2021.11.17 |