# Spring MVC - @RequestMapping, @RequestParam, ModelAndView
Study Repository

Spring MVC - @RequestMapping, @RequestParam, ModelAndView

by rlaehddnd0422

์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ด์„œ ์œ ์—ฐํ•˜๊ณ  ์‹ค์šฉ์ ์ž…๋‹ˆ๋‹ค.

v1 - @RequestMapping ๋„์ž…

@RequestMapping ๊ธฐ๋ฐ˜์˜ ์–ด๋…ธํ…Œ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. MemberForm

SpringMemberFormControllerV1

@Controller
public class SpringMemberFormControllerV1 {

    @RequestMapping("springmvc/v1/members/new-form")
    public ModelAndView process()
    {
        return new ModelAndView("new-form");
    }
}

@Controller 

  • ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก ( @Controller ์–ด๋…ธํ…Œ์ด์…˜ ๋‚ด๋ถ€์— @Component๊ฐ€ ์žˆ์–ด์„œ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์œผ๋กœ ๋“ฑ๋ก )
  • ์Šคํ”„๋ง MVC์—์„œ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ธ์‹

@RequestMapping

  • ์š”์ฒญ ์ •๋ณด๋ฅผ ๋งคํ•‘. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ž…๋ ฅํ•œ URL์ด ํ˜ธ์ถœ๋˜๋ฉด ์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ๋™์ž‘์œผ๋กœ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์€ ์ž„์˜๋กœ ์ง€์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

ModelAndView

  • Model๊ณผ View์˜ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๋ฆฌํ„ด 
  • Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ
  • Model๋„ ์žˆ์ง€๋งŒ ModelAndView๋Š” view์„ค์ •, model์„ค์ •, ์ƒํƒœ ์„ค์ • ๊นŒ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

@Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ @Component๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@Component
@RequestMapping
public class SpringMemberFormControllerV1 {

    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process()
    {
        return new ModelAndView("new-form");
    }
}

 

๋˜๋Š” ์•„๋ž˜ ์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ˆ˜๋™์œผ๋กœ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

@ServletComponentScan
@SpringBootApplication
public class ServletApplication {

   public static void main(String[] args) {
      SpringApplication.run(ServletApplication.class, args);
   }
   @Bean
   SpringMemberFormControllerV1 springMemberFormControllerV1(){
      return new SpringMemberFormControllerV1();
   }
}
package hello.servlet.web.springmvc.v1;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//@Component
//@RequestMapping

@RequestMapping
public class SpringMemberFormControllerV1 {

    @RequestMapping("/springmvc/v1/members/new-form")
    public ModelAndView process()
    {
        return new ModelAndView("new-form");
    }
}

 

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” @Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ œ๋ถ€ํ„ฐ๋Š” ๋นˆ์„ @Component๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜, ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ  @Controller๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

2. MemberSave

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

 

์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…์—†์ด ๋กœ์ง๋งŒ ์š”์•ฝํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. springmvc/v1/members/save URL ํ˜ธ์ถœ
  2. request๋กœ๋ถ€ํ„ฐ "username", "age" parameter โžฃ String username, int age ๊ฐ๊ฐ ์ €์žฅ
  3. Member ๊ฐ์ฒด username, age๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ
  4. ์‹ฑ๊ธ€ํ†ค MemberRepository์— ์ €์žฅ
  5. ModelAndView ์ƒ์„ฑ - ์ƒ์„ฑ์ž๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ทฐ ๋…ผ๋ฆฌ์ด๋ฆ„
  6. Model์— member๊ฐ์ฒด "member"๋กœ ๋‹ด๊ณ  ๋ฆฌํ„ด
  • mv.addObject("member",member) : ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ModelAndView๋ฅผ ํ†ตํ•ด Model ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” addObject()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฉ๋‹ˆ๋‹ค.

3. MemberList

@Controller
public class SpringMemberListControllerV1 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

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

logic

 

1. /springmvc/v1/members URL ํ˜ธ์ถœ 

2. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ -> FindAll() -> List<Member> member์— ์ €์žฅ

3. ModelAndView ์ƒ์„ฑ -> ๋ทฐ ๋…ผ๋ฆฌ์ด๋ฆ„ "members"

4. ModelAndView ๊ฐ์ฒด์— addObject()๋ฅผ ํ†ตํ•ด List ๋‹ด์Œ

5. ModelAndView return

v2 - Controller ํ†ตํ•ฉ

package hello.servlet.web.springmvc.v2;

import hello.servlet.basic.domain.member.Member;
import hello.servlet.basic.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

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

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @RequestMapping("/new-form")
    @ResponseBody
    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(HttpServletRequest request, HttpServletResponse response) {
        List<Member> members = memberRepository.findAll();

        ModelAndView mv = new ModelAndView("members");
        mv.addObject("members", members);
        return mv;
    }
}

 

์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์กฐํ•ฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฐฉ์‹์—์„œ ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” "/springmvc/v1/members" URL์˜ ์ค‘๋ณต์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ•œ ํด๋ž˜์Šค์— ํ†ตํ•ฉํ•˜๊ณ  ์œ„์™€ ๊ฐ™์ด ํด๋ž˜์Šค๋ ˆ๋ฒจ์— ์ค‘๋ณต URL์„ @RequestMapping ํ•ด์ฃผ๋ฉด ํ›จ์”ฌ ํด๋ฆฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

v3 - ์‹ค์šฉ์„ฑ ์˜ฌ๋ฆฌ๊ธฐ ( ์‹ค๋ฌด )

 

SpringMemberControllerV3

package hello.servlet.web.springmvc.v3;

import hello.servlet.basic.domain.member.Member;
import hello.servlet.basic.domain.member.MemberRepository;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

//     @GetMapping(value="/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("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
    @RequestMapping(method = RequestMethod.GET)
    public String members(Model model)
    {
        List<Member> members = memberRepository.findAll();
        model.addAttribute("members",members);
        return "members";
    }


}

1. Model ๋„์ž…

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

2. ModelAndView๊ฐ€ ์•„๋‹Œ String์œผ๋กœ ViewName ์ง์ ‘ ๋ฐ˜ํ™˜

  • view์˜ ๋…ผ๋ฆฌ์ด๋ฆ„์„ String ํ˜•ํƒœ๋กœ ์ง์ ‘ ๋ฆฌํ„ด

3. @RequestParam ์‚ฌ์šฉ

  • ์Šคํ”„๋ง์€ HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ @RequestParam์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • @RequestParam("username")์€ request.getParameter("username")๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ผ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌผ๋ก  GET ๋ฐฉ์‹(์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ), POST(๋ฉ”์‹œ์ง€ ๋ฐ”๋””) ๋ฐฉ์‹ ๋ชจ๋‘ ์ง€์› 

4. @RequestMapping โžฃ @GetMapping, @PostMapping

  • @RequestMapping์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ method=RequestMethod.GET ๋˜๋Š” method=RequestMethod.POST ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „์†กํ• ์ง€(GET), ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋กœ ์ „๋‹ฌํ• ์ง€(POST)๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, @GetMapping, @PostMapping์„ ์ด์šฉํ•ด ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Get,Post,Put,Delete,Patch ๋ชจ๋‘ ์–ด๋…ธํ…Œ์ด์…˜์ด ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

<์ฐธ๊ณ  ์ž๋ฃŒ>

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

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

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., -

www.inflearn.com

https://bestkingit.tistory.com/155

 

[Spring Boot] Model ๊ณผ ModelAndView ์ฐจ์ด.

์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์„ธ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋„์ค‘์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ Controller์—์„œ Model์„ ์ด์šฉํ•˜์—ฌ view์— ๋„ฃ์–ด์ฃผ์—ˆ๋Š”๋ฐ, HandlerInterceptor์˜ postHandle์—๋Š” ModelAndView๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค..(ํ™•์žฅํ•˜๋ฉด ๋˜์ง€๋งŒ

bestkingit.tistory.com

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ