@Controller ~ @RequestMapping
RequestMapping
웹 어플리케이션은 원하는 형태의 request URL을 받아서
그 URL을 처리하는 동작(handler)를 찾아서 (mapping) 수행하고
원하는 ‘뷰’ 로 response 해주기
용어: 메소드? 핸들러? 컨트롤러?
@Controller 클래스 안의 @RequestMapping 등으로 지정된 메소드를 핸들러(Handler) 라고도 함.
그러나, 보통 혼용되어 이야기 됨.
컨트롤러 이야기 할때 메소드, 핸들러, 컨트롤러… ← 대체로 같은것을 지칭하는 것
* 기본적인 Controller 클래스 제작 흐름
@Controller를 이용한 클래스 생성
↓
요청 경로 지정
@RequestMapping, @GetMapping …. - 다양한 방법의 '경로지정'
↓
요청 처리 메소드 (handler) 구현 - 다양한 방법의 매개변수 지정
↓
“뷰 이름” 혹은 ModelAndView 리턴
URL mapping ↔ 메소드 이름 ↔ 뷰이름
HomeController.java에 핸들러 메소드 작성
URL mapping , handler(메소드) 이름, 뷰 이름 리턴값 ← 굳이 같을 필요는 없다.
BoardController.java
package com.lec.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/board")
public class BoardController {
@RequestMapping("/list") // request --> /board/list
public String listBoard() {
return "board/list_board";
}
@RequestMapping("/write")
public String writeBoard() {
return "board/write_board";
}
@RequestMapping("/view") // request --> /board/view
public String viewBoard() {
return "board/view_board";
}
@RequestMapping("/update")
public String updateBoard() {
return "board/update_board";
}
@RequestMapping("/delete")
public String deleteBoard() {
return "board/delete_board";
}
} // end Controller
MemberController.java
package com.lec.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/member") // -> /member 로 시작하는 request 를 처리
public class MemberController {
@RequestMapping(value = "/save") // URL -> /member + /save
public String saveMember() { // => /member/save
return "member/save";
}
@RequestMapping(value = "/load")
public String loadMember() {
return "member/load"; // => /member/load
}
// 서버 가동중 에러 발생!
// mapping url 중복.
// @RequestMapping(value = "/search")
// public String searchMember() {
// return "member/search"; // => /member/search
// }
// 핸들러 리턴값이 void 이면
// mapping 되는 url문자열에 해당하는 .jsp 파일로 forwarding 된다
// (일반적으로 많이 사용)
@RequestMapping("/remove")
public void removeMember() { // URL => /member/remove
// JSP => /member/remove.jsp
}
}
‘뷰’ 에 데이터 전달 : Model 매개변수
Model은 매개변수로 넘겨진다. ‘스프링 쪽’에서 넘겨주는 것이다.
핸들러 메소드는 Model 에 담기만 하면, 스프링이 DispatcherServlet에 넘겨준다.
향후 트랜잭션들을 수행한 결과를 model 에 담아서 뷰에 넘길수 있다.
‘뷰’ + ‘Model’ : ModelAndView 리턴
ModelAndView 에는 데이터들도 담고 ‘뷰’ 도 지정하고 그리고 리턴되면 OK
확장자 패턴 가능 *
@RequestMapping(value = "/member/*.do")
public String doMember() {
return "member/domember";
}
* 핸들러 메소드 동작은
1. @RequestMapping 으로 매핑된 request가 들어오면
2. 필요한 동작들(ex: 트랜잭션) 수행, DAO 혹은 @Service 등의 객체 사용
3. 결과는 Model에 담고, 뷰(View) 지정 ⇒ 합해서 ModelAndView 로 담아 리턴 가능
컨트롤러 클래스에 @RequestMapping !
일반적으로 request URL 체계도, 다루는 아이템별로 다루게 되는데…
가령
회원관리 URL 형태는 /member/○○○
상품관리 URL 형태는 /goods/○○○
이런식으로 request URL 이 기획되어 관리될 것이다.
그런데, 과연 이 모든 handler 가 하나의 @Controller 클래스에 있으면 체계적인 관리가 힘들다.
컨트롤러 클래스 작성
패키지 : {base-package}.controller
클래스명 : MemberController
@Controller 클래스 추가하면, 반드시 서버 재시작
DevTool 사용시는 굳이 할필요 없음
만약 @RequestMapping 중복되면?
애시당초 서버 가동 중에 Exception 발생한다
/member/search로 request 해보자
'Spring' 카테고리의 다른 글
[Spring Boot] Validation (0) | 2022.05.12 |
---|---|
[SpringBoot] Request Parameter (0) | 2022.05.12 |
[SpringBoot] MVC (0) | 2022.05.12 |
[SpringBoot] Dependency Injection 의존주입 (0) | 2022.05.12 |
[Spring] Spring이란 (0) | 2022.05.11 |