728x90
반응형
MVC 프레임워크 만들기에서 v3은 ModelView를 개발자가 직접 생성해서 반환했기 때문에,
불편했던 기억이 날 것이다.
물론 v4를 만들면서 실용적으로 개선한 기억도 날 것이다.
스프링 MVC는 개발자가 편리하게 개발할 수 있도록 수 많은 편의 기능을 제공한다.
실무에서는 지금부터 설명하는 방식을 주로 사용한다.
SpringMemberControllerV3
package helloMVC.servlet.web.springmvc.v3;
import helloMVC.servlet.domain.member.Member;
import helloMVC.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* v3
* Model 도입
* ViewName 직접 반환
* @RequestParam 사용
* @RequestMapping -> @GetMapping, @PostMapping
*/
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping("/new-form")
public String newForm() {
return "new-form";
}
@RequestMapping("/save")
public String save(
@RequestParam("uesrname") 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
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
그런데 여기서 통신 방식을 지정할 수 있다.(GET/POST)
package helloMVC.servlet.web.springmvc.v3;
import helloMVC.servlet.domain.member.Member;
import helloMVC.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* v3
* Model 도입
* ViewName 직접 반환
* @RequestParam 사용
* @RequestMapping -> @GetMapping, @PostMapping
*/
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@RequestMapping(value = "/new-form", method = RequestMethod.GET)
public String newForm() {
return "new-form";
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(
@RequestParam("uesrname") 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.GET)
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
어노테이션을 사용하면 더 편리하다
package helloMVC.servlet.web.springmvc.v3;
import helloMVC.servlet.domain.member.Member;
import helloMVC.servlet.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* v3
* Model 도입
* ViewName 직접 반환
* @RequestParam 사용
* @RequestMapping -> @GetMapping, @PostMapping
*/
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("new-form")
// @RequestMapping(value = "/new-form", method = RequestMethod.GET)
public String newForm() {
return "new-form";
}
@PostMapping("/save")
// @RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(
@RequestParam("uesrname") String username,
@RequestParam("age") int age,
Model model) {
Member member = new Member(username, age);
memberRepository.save(member);
model.addAttribute("member", member);
return "save-result";
}
// /springmvc/v2/members
@GetMapping
// @RequestMapping(method = RequestMethod.GET)
public String members(Model model) {
List<Member> members = memberRepository.findAll();
model.addAttribute("members", members);
return "members";
}
}
new-form은 GetMapping 이어서 GET방식은 정상으로 응답하고
Post방식은 상태코드를 405로 반환하여 허용하지 않는다.
728x90
반응형
'스프링 > 스프링 웹' 카테고리의 다른 글
[Spring] 로깅(logging) (0) | 2023.06.05 |
---|---|
[Spring] 스프링 MVC 기본 기능 학습을 위한 프로젝트 생성 (0) | 2023.06.05 |
[Spring] 스프링 MVC 컨트롤러 통합 (0) | 2023.05.31 |
[Spring] 스프링 MVC로 적용하기 - @RequestMapping, @Controller (0) | 2023.05.31 |
[Spring] 뷰 리졸버(View Resolver) (0) | 2023.05.31 |
댓글