SpringMVC - 06. Spring MVC 02
Spring MVC
v1
@Controller
public class SpringMemberFormController {
@RequestMapping("/save")
public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
ModelAndView mv = new ModelAndView("save-result");
mv.addObject("member", member);
return mv;
}
}
@Controller
- Spring MVC에서 Annotation 기반의 컨트롤러로 인식
- RequestMappingHandlerMapping이 매핑 정보로 인식함 (클래스 레벨에 붙어 있는 경우)
- 내부에 isHandler 메소드에서 확인 가능
- 내부에 @Component가 포함되어 있어서 자동으로 스프링 빈으로 등록됨
@RequestMapping
- 요청 정보를 매핑
- RequestMappingHandlerMapping이 매핑 정보로 인식함 (클래스 레벨에 붙어 있는 경우)
- 내부에 isHandler 메소드에서 확인 가능
- 해당 URL이 호출되면, Annotation 기반으로 동작 => 메소드 이름은 임의로 지으면 됨
ModelAndView
- 모델과 뷰 정보를 담아서 반환
v3
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberController {
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(
@RequestParam("username") String username,
@RequestParam("age") int age,
Model model) {
Member member = new Member(username, age);
memberRepository.save(member);
model.addAttribute("member", member);
return "save-result";
}
}
@RequestMapping
- method = RequestMethod.POST
- 해당 요청이 들어올 때, 요청 방식을 POST로 고정
- 다른 HTTP 메소드로 들어올 수 없게 막고 하나의 요청 방식만 처리할 수 있게 만듬
- 다른 메소드로 접근하면 405 에러 발생
- @PostMapping과 같이 메소드 이름에 Mapping을 붙여서 구현 가능
@RequestParam
- 파라미터로 전달된 값을 바로 받아와 변수에 담아줌
- request.getParameter()와 거의 같은 코드
ModelAndView 사용 X => Model 파라미터 사용
- Model을 파라미터로 받아서 사용 => 스프링이 제공하는 Model을 그대로 사용 가능
- Model 객체에 @RequestParam으로 받아온 파라미터값을 addAttribute로 등록
- View는 문자열 (String)으로 그대로 직접 반환해줌
댓글남기기