Spring MVC-TIL (8)

YulHee Kimยท2021๋…„ 9์›” 14์ผ
0

Spring MVC

๋ชฉ๋ก ๋ณด๊ธฐ
8/11
post-thumbnail

[์ฐธ๊ณ  ๊ฐ•์˜] ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ 

๐Ÿ’ก ์Šคํ”„๋ง MVC - ๊ตฌ์กฐ ์ดํ•ด

โœ๏ธ ์Šคํ”„๋ง MVC ์‹œ์ž‘ํ•˜๊ธฐ

@RequestMapping
์Šคํ”„๋ง์€ ์• ๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•œ ๋งค์šฐ ์œ ์—ฐํ•˜๊ณ , ์‹ค์šฉ์ ์ธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์ด๊ฒƒ์ด ๋ฐ”๋กœ @RequestMapping ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค.

@RequestMapping

  • RequestMappingHandlerMapping
  • RequestMappingHandlerAdapter

๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘๊ณผ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋Š” RequestMappingHandlerMapping , RequestMappingHandlerAdapter ์ด๋‹ค.
์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ง€๊ธˆ ์Šคํ”„๋ง์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ง€์›ํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘๊ณผ ์–ด๋Œ‘ํ„ฐ์ด๋‹ค. ์‹ค๋ฌด์—์„œ๋„ ์‚ฌ์šฉํ•œ๋‹ค.

SpringMemberFormControllerV1 - ํšŒ์› ๋“ฑ๋ก ํผ

@Controller
public class SpringMemberFormControllerV1 {

    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process() {
        return new ModelAndView("new-form");
    }
}
  • @Controller:
    • ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. (๋‚ด๋ถ€์— @Component ์• ๋…ธํ…Œ์ด์…˜์ด ์žˆ์–ด์„œ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์˜ ๋Œ€์ƒ์ด ๋จ)
    • ์Šคํ”„๋ง MVC์—์„œ ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ธ์‹ํ•œ๋‹ค.
  • @RequestMapping
    • ์š”์ฒญ ์ •๋ณด๋ฅผ ๋งคํ•‘ํ•œ๋‹ค. ํ•ด๋‹น URL์ด ํ˜ธ์ถœ๋˜๋ฉด ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
  • @ModelAndView
    • ๋ชจ๋ธ๊ณผ ๋ทฐ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

SpringMemberSaveControllerV1 - ํšŒ์› ์ €์žฅ

@Controller
public class SpringMemberSaveControllerV1 {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/springmvc/v1/members/save")
    public ModelAndView process(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;
    }
}
  • mv.addObject("member",member)
    ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ModelAndView๋ฅผ ํ†ตํ•ด Model ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” addObject()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ์ดํ›„ ๋ทฐ๋ฅผ ๋ Œ๋”๋ง ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

SpringMemberListControllerV1 - ํšŒ์› ๋ชฉ๋ก

@Controller
public class SpringMemberListControllerV1 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/springmvc/v1/members")
    public ModelAndView process() {
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);

        return mv;
    }
}

โœ๏ธ ์ปจํŠธ๋กค๋Ÿฌ ํ†ตํ•ฉ

SpringMemberControllerV2

@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/new-form")
    public ModelAndView newForm() {
        return new ModelAndView("new-form");
    }

    @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;
    }

    @RequestMapping
    public ModelAndView members() {
        List<Member> members = memberRepository.findAll();
        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);

        return mv;
    }
}

ํด๋ž˜์Šค ๋ ˆ๋ฒจ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด @RequestMapping ์„ ๋‘๋ฉด ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ๊ณผ ์กฐํ•ฉ์ด ๋œ๋‹ค.
ex)
ํด๋ž˜์Šค ๋ ˆ๋ฒจ @RequestMapping("/springmvc/v2/members")
๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ @RequestMapping("/new-form")
์ตœ์ข… ์กฐํ•ฉ : /springmvc/v2/members/new-form

โœ๏ธ ์‹ค์šฉ์ ์ธ ๋ฐฉ์‹

SpringMemberControllerV3

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @GetMapping("/new-form")
    public String newForm() {
        return "new-form";
    }

    @PostMapping("/save")
    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";
    }

    @GetMapping
    public String members(Model model) {

        List<Member> members = memberRepository.findAll();

        model.addAttribute("members", members);
        return "members";
    }
}

Model ํŒŒ๋ผ๋ฏธํ„ฐ
save(), members()๋ฅผ ๋ณด๋ฉด Model์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ViewName ์ง์ ‘ ๋ฐ˜ํ™˜
๋ทฐ์˜ ๋…ผ๋ฆฌ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

@RequestParam ์‚ฌ์šฉ
์Šคํ”„๋ง์€ HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ @RequestParam์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
@RequestParam("username") ์€ request.getParameter("username") ์™€ ๊ฑฐ์˜ ๊ฐ™์€ ์ฝ”๋“œ๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€