Controller
•
@Controller와 @RequestMapping 선언
◦
method 단위의 mapping이 가능
◦
DefualtAnnotaionHandlerMapping과 AnnotationHandlerAdapter를 사용함
▪
Spring 3.0부터는 기본 설정이므로 별도의 추가 없이 사용 가능
@Controller
•
Controller Class는 Client의 요청을 처리하는 역할
•
@Controller 선언
◦
Class 타입에 적용
사용 방법 1 - Controller Class를 <bean>에 등록
사용 방법 2 - Controller Class 자동 스캔
•
context:component-scan 선언
•
base-package에 설정된 package 내의 class 중 @Controller annotation이 적용된 클래스는 자동 스캔대상이 된다.
@RequestMapping 선언
•
요청 URL mapping 정보를 설정
•
클래스타입과 메서드에 설정 가능
•
Controller method의 HTTP method에 한정하여 같은 URL 요청에 대하여 HTTP method(GET, POST,,,)에 따라 서로 다른 메서드를 mapping 할 수 있음
@RequestMapping(value = "/index.do", method = RequestMethod.GET)
public String home(Model model){
model.addAttribute("message", "안녕하세요 스프링(GET)!!!");
return "index";
}
@RequestMapping(value = "/index.do", method = RequestMethod.GET)
public String home(Model model){
model.addAttribute("message", "안녕하세요 스프링(POST)!!!");
return "index";
}
/////////////////////////////////////////////////
// 아래처럼 @GetMapping, @PostMapping으로 사용 가능
@GetMapping("index.do")
public String home(Model model){
model.addAttribute("message", "안녕하세요 스프링(GET)!!!");
return "index";
}
Java
복사
@RequestParam annotaion을 이용한 parameter mapping
•
@RequestParam을 지정하면 자동으로 선언한 변수에 값이 Mapping된다.
•
만약 parameter 이름이 URL과 동일하다면 @RequestParam 없이도 사용할 수 있다. (age)
•
required가 true로 선언되어 있으면 값이 넘어오지 않을 때 에러를 발생시킨다.
// URL 호출 : http://localhost/web/index.do?name=김경준&age=30
@Controller
public class HomeController{
@RequestMapping(value = "/index.do" , method = RequestMethod.GET)
public String home(@RequestParam(value ="name", required= false) String name,
// @RequestParam(value ="age", defaultValue="25"),
int age, Model model) {
model.addAttribute("message", name + "(" + age + ")님 안녕하세요!!!");
return "index";
}
}
Java
복사
HTML form과 Command Object(DTO, VO..)
•
SpringMVC는 form에 입력한 data를 JavaBean 객체를 이용해서 전송할 수 있음
•
data name이 setter와 동일한 경우(set 빼고 첫글자 소문자) 자동으로 set 해서 객체로 담아줌
•
View에서 Command 객체에 접근
◦
Command 객체는 자동으로 반환되는 Model에 추가됨
◦
Controller의 @RequestMapping annotaion method에서 전달받은 Command 객체에 접근
◦
@ModelAttribute를 사용하여 View에서 사용할 Command 객체의 이름을 변경 가능
Servlet API 사용
•
HttpSession의 생성을 직접 제어해야 하는 경우
•
Controller가 Cookie를 생성해야 하는 경우
•
Servlet API를 선호하는 경우
@Controller
public class HomeController{
public String hello(HttpServletRequest request, HttpServletResponse respons){
return "ok";
}
}
Java
복사
View
•
View 이름을 명시적으로 지정
◦
ModelAndView와 String 리턴 타입
◦
String을 이용하면 return을 통해 View의 이름을 지정 가능하다.
•
View 이름의 자동지정
◦
RequestToViewNameTranslator를 이용하여 URL로부터 View 이름을 결정
◦
자동 지정 유형
▪
return type이 Model이나 Map인 경우
▪
return type이 void면서 ServletResponse나 HttpServletResponse 타입의 parameter가 없는 경우
•
redirect view
◦
View 이름에 redirect: 접우어를 붙이면, 지정한 페이지로 redirect됨
Model
•
View에 전달하는 데이터
◦
@RequestMapping annotaion이 적용된 method의 Map, Model, ModelMap
◦
@RequestMapping method가 return하는 ModelAndView
◦
@ModelAtrribute annotation이 적용된 method가 return한 객체
•
Map, Model, ModelMap을 통한 설정
◦
method의 argument로 받는 방식
@Controller
public class HomeController{
@RequestMapping("/hello.do")
public String hello(Map model){
model.put("message", "안녕하세요");
return "hello";
}
@RequestMapping("/hello2.do")
public String hello2(ModelMap model){
model.addAttribute("message", "안녕하세요");
return "hello";
}
@RequestMapping("/hello3.do")
public String hello3(Model model){
model.addAttribute("message", "안녕하세요");
return "hello";
}
}
Java
복사