Spring MVC

: 이제 Controller만 만들면 된다. Spring에서 내부적으로 다 포워딩을 해준다. Spring에 프론트 컨트롤러인 dispatcherservlet 내부에 다 존재한다. 따라서 만드는데 간단해진다 GOOD !

<aside> ✅ Q. 스프링에서 제공하는 Model은 무슨 역할을 해 ?

A. 스프링에서 Model컨트롤러가 뷰에 데이터를 전달하는 데 필수적인 역할을 합니다. 뷰가 사용자에게 표시할 데이터를 쉽게 접근할 수 있게 합니다.

model.addAttribute 메소드를 사용하여 컨트롤러에서 생성하거나 처리한 데이터를 뷰로 전달할 수 있다. 뷰는 이 데이터를 사용하여 사용자에게 표시할 화면 콘텐츠를 생성

</aside>

사용 예시

@Controller
public class ExampleController {

    @GetMapping("/greeting")
    public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting"; // 뷰 이름 (예: greeting.html, greeting.jsp)
    }
}

// 대체로 **addAttribute를 사용하여 컨트롤러에서 생성한 데이터를 뷰로 가져오기** 위해 사용
// (Model 객체는 addAttribute 메소드를 사용하여 name이라는 키에 name 값을 추가합니다.)

Spring 요청 처리 핸들링

//spring 에서 요청 처리를 하고 싶으면 @Controller
@Controller
@RequestMapping("/spring/chap01/*") // 적어둔 요청 URL이 들어오면 받겠다. 자유롭게 써도 됨.
public class BasicController {

    // 디테일한 요청들은 메서드로 !
    // URL : /spring/chap01/hello -> url이 들어오면 아래 메서드 요청을 받겠다
    @RequestMapping("/hello")  // 특정 추가 url
    public String hello() {
        System.out.println("hello 요청이 들어옴.");
        return "hello"; // 화면에 표시할 jsp 파일
    }

    // =========📌URL에 붙어있는 요청 파라미터 (query string) 읽기
    //url 에 붙어 있거나 form 태그에서 전송된 데이터

    // 1. HttpServletRequest 사용 - ⭐request.getParameter 로 읽어오기
    @RequestMapping("/person")
    public String person(HttpServletRequest request) {
        System.out.println("/person !!!");

        String name = request.getParameter("name");
        String age = request.getParameter("age");
        System.out.println("name = " + name);
        System.out.println("age = " + age);
        return "";
    }

    // 2. @RequestParam 사용하기 - 직접 파라미터를 요청해서 읽어오겠다 ~
    @RequestMapping("/major")
    // @RequestParam 생략 가능 ! but, @RequestParam("클라이언트에게 보낼거 적기 URL") String mj
    public String major(String stu, @RequestParam("major") String mj, @RequestParam int grade) {
        System.out.println("stu = " + stu);
        System.out.println("major = " + mj);
        System.out.println("grade = " + grade);

        return "";
    }

    // 3. 커맨드 객체 (RequestDTO) 사용하기
    // EX) /order?orderNum=1&goods=구두...파라미터가 10개가 넘어 ...
    @RequestMapping("/order")
    public String order(OrderDto order) {
        System.out.println("주문번호 = " + order.getOrderNum());
        System.out.println("주문상품 = " + order.getGoods());
        System.out.println("주문갯수 = " + order.getAmount());
        System.out.println("주문가격 = " + order.getPrice());

        return "";
    }

}

Spring - jsp 파일로 포워딩할 때 데이터 전달하기 <Model, ModelAndView>

@Controller
public class ResponseController {

    // 📌JSP 파일로 포워딩할 때 데이터 전달하기

    // 1. Model 객체 사용하기 - 파라미터로 컨트롤러에 데이터를 뷰에 가져다 주기
    @RequestMapping("/hobbies")
    public String hobbies(Model model) {

        model.addAttribute("name", "강길동");
        model.addAttribute("hobbies", List.of("수영", "등산", "OTT"));
        model.addAttribute("major", "건축학");

        return "mvc/hobbies";
    }

    // 2. ModelAndView 객체 사용하기 - 메서드 타입 !
    @RequestMapping("/hobbies2")
    public ModelAndView hobbies2() {
        // model 데이터와 view 를 합쳐주는 느낌 !?
        ModelAndView mv = new ModelAndView("mvc/hobbies"); // 여기에 jsp 파일 넣기

        mv.addObject("name", "박수순");
        mv.addObject("major", "항공과");
        mv.addObject("hobbies", List.of("독서", "덕질"));

        return mv;
    }
}