티스토리 뷰
Chapter05. 컨트롤러 구현 : '도서 쇼핑몰'에서 도서 목록 출력 (2)
5.4 요청 처리 메서드와 모델 유형
요청 처리 메서드는 스프링 MVC에서 사용자 요청을 처리하는 메서드를 의미한다.
@RequestMapping에 설정된 요청 매핑 경로에 따라 호출된다.
@RequestMapping(..)
public String 메서드 이름(){
//모델(객체)에 응답 데이터 저장
return "뷰 이름";
}
요청 처리 메서드에는 사용자 요청을 처리한 결과를 웹 브라우저 화면에 보여주는 모델과 뷰가 있다.
모델은 사용자의 웹 요청을 처리한 결과 데이터를 관리하고 전달한다.
뷰는 처리된 결과 데이터를 웹 브라우저에 출력하는 웹 페이지 역할을 한다.
✔ 응답 데이터를 저장하는 모델 유형 (중요!!!)
모델(&뷰) 클래스 | 설명 |
Model | 데이터(또는 객체) 정보를 저장하는데 사용한다. |
Model Map | 데이터(또는 객체) 정보를 저장하는데 사용한다. |
ModelAndView | 모델 정보 및 뷰 정보를 저장하는데 사용한다. |
* Model 과 Model Map은 같은 역할을 하므로 둘 중 어느것을 사용해도 상관 없다.
5.4.1 Model 인터페이스를 이용한 메서드 작성
Model 인터페이스는 사용자 요청에 대한 처리 결과를 보여주는데 필요한 데이터를 Model 객체의 addAttribute() 메서드에 담아 전달한다.
Model addAttribute(String attrivuteName, Object attributeValue)
- 역할 : 제공된 이름으로 제공된 속성을 등록한다.
- 매개변수 :
- attributeName : 모델 속성 이름 (null이 될 수 없음 / key 값)
- attributeValue : 모델 속성 값 (null이 될 수 있음 / value 값)
Example05Controller.java
package com.springmvc.chap05;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/home")
public class Example05Controller {
@GetMapping("/exam05")
public String requestMethod(Model model) {
System.out.println("exam05");
model.addAttribute("data", "Modoel 예제입니다.");
model.addAttribute("data2", "웹 요청 URL은 /home/exam05입니다.");
return "webpage05";
}
}
webpage05.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>chap05</title>
</head>
<body>
<p>${data}
<p>${data2}
</body>
</html>
서블렛 컨트롤러에서
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
5.4.3 ModelAndView 클래스를 사용한 메서드 작성
Example07Controller.java
package com.springmvc.chap05;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/home")
public class Example07Controller {
@GetMapping("/exam07")
public ModelAndView requestMethod(ModelMap model) {
ModelAndView mav = new ModelAndView();
mav.addObject("data", "ModelAndView 예제입니다");
mav.addObject("data2", "웹 요청 URL은 /home/exam07 입니다.");
mav.setViewName("webpage05");
return mav;
}
}
Model(ModelMap) 클래스 | ModelAndView 클래스 | |
뷰에 사용할 데이터 | addAttribute() 메서드 사용 | addObject() 메서드 사용 |
요청할 뷰 이름 | 없음 * 요청 처리 함수 안에 문자열로 뷰 이름을 반환해야 한다. |
setViewName() |
5.4.4 ModelAndView 클래스를 사용하여 결과 반환하기
BookController.java
package com.springmvc.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.springmvc.domain.Book;
import com.springmvc.service.BookService;
@Controller
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping
public String requestBookList(Model model) {
List<Book> list = bookService.getAllBookList();
model.addAttribute("bookList",list);
return "books";
}
@GetMapping("/all")
public ModelAndView requestAllBooks(Model model) {
ModelAndView modelAndView = new ModelAndView();
List<Book> list = bookService.getAllBookList();
modelAndView.addObject("bookList", list);
modelAndView.setViewName("books");
return modelAndView;
}
}
'코딩 > spring' 카테고리의 다른 글
[15주 4일차] 요청 처리 메서드의 파라미터 유형 (0) | 2024.01.18 |
---|---|
[15주 4일차] 요청 처리 메서드의 파라미터 유형 : 다양한 조건으로 검색한 도서 목록 출력하기 (0) | 2024.01.18 |
[15주 3일차] 컨트롤러 구현 (0) | 2024.01.17 |
[15주 3일차] 스프링 MVC 애플리케이션의 계층적 구조 (0) | 2024.01.17 |
[15주 2일차] 도서 쇼핑몰 프로젝트 (0) | 2024.01.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday