3.4 요청처리 메소드와 모델 유형
#요청 처리 메소드
- 스프링 MVC에서 사용자 요청을 처리하는 메서드
- @RequestMapping 에 설정된 요청 매핑 경로에 따라 호출됨.
@RequestMapping(...)
public String 메서드 이름() {
//모델 (객체) 에 응답 데이터 저장
return "뷰 이름" ;
}
- 사용자 요청을 처리한 결과를 웹 브라우저 화면에 보여주는 모델과 뷰가 있음.
모델 | 뷰 |
사용자의 웹 요청을 처리한 결과 데이터를 관리하고 전달 | 처리한 결과 데이터를 웹 브라우저에 출력하는 웹페이지 역할 |
아래는 응답 데이터를 저장하는 모델 유형
모델( &뷰) 클래스 | 설명 |
Model | 데이터(객체) 정보를 저장하는 데 사용 |
ModelMap | 데이터(객체) 정보를 저장하는 데 사용 |
ModelAndView | 모델 정보 및 뷰 정보를 저장하는 데 사용 |
5.4.1 Model 인터페이스를 이용한 메서드 작성
- Model 인터페이스는 사용자 요청에 대한 처리 결과를 뷰에 보여 주는 데 필요한 데이터를 Model 객체의 addAttribute() 메서드에 담아 전달한다.
Model addAttribute(String attributeName, Object attributeValue )
//제공된 이름으로 제공된 속성을 등록한다.
//attributeName : 모델 속성 이름
//attributeValue : 모델 속성 값
다음은 requestMethod() 에 Model 객체를 사용하여 모델 속성 이름 data 와 data2에 뷰로 전송할 값을 각각 저장하는 예이다.
@Controller
@RequestMapping(" /home")
public class Example05Controller {
@GetMapping(" /exam05")
public String requestMethod(Model model) {
model.addAttribute("data", "Model 예제입니다" );
model.addAttribute("data2" , "웹 요청 url은 /home/exam05입니다");
return "webpage05";
}
}
뷰 이름을 webpage05로 반환하면 webpage05.jsp 파일으 웹 브라우저에 출력한다.
5.4.2 ModelMap 클래스를 이용한 메소드 작성
ModelMap 클래스는 사용자 요청에 대한 처리 결과를 뷰에 보여주는 데 필요한 데이터를 Model 객체의 addAttribute() 메소드에 담아 전달한다.
ModelMap addAttribute(String attributeName, object attributeValue)
// 지정된 이름(attributeName)과 속성 (attributeValue) 를 등록한다.
모델 속성 이름 data와 data2에 뷰로 전송할 데이터를 저장하고 뷰 이름 webpage05로 반환한다.
@Controller
@RequestMapping(" /home")
public class Example06Controller {
@GetMapping(" /exam06")
public String requestMethod(ModelMap model) {
model.addAttribute("data", "ModelMap 예제입니다" );
model.addAttribute("data2" , "웹 요청 url은 /home/exam06입니다");
return "webpage05";
}
}
3.4.3 ModelAndView 클래스를 사용한 메소드 작성
ModelAndView 클래스는 모델과 뷰 이름을 합쳐 놓은 것이다.
사용자 요청에 대한 처리 결과 데이터를 ModelAndView 객체의 addObject() 메서드에 담아 전달하고 setViewName() 메서드로 뷰 이름을 설정한다.
ModelAndView addObject(String attributeName , Object attributeValue)
//지정된 이름으로 (attributeName)으로 제공된 속성(attributeValue) 을 등록한다.
void setViewName(String viewName)
//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;
}
}
사용자의 웹 요청 url에 대한 응답으로 웹 브라우저에 webpage05 페이지를 출력하는 과정이다.
Model(ModelMap) 클래스 | ModelAndView 클래스 | |
뷰에 사용할 데이터 | addAttribute() 메서드 사용 | addObject() 메서드 사용 |
요청할 뷰 이름 | 없음 | setViewName() |
4.1 경로 변수와 @PathVariable
#PathVariable 애너테이션
- 웹 요청 url 에 포함된 파라미터 값을 전달받는 경로 변수와 이를 처리하는 요청 처리 메서드의 매개변수에 선언함.
4.1.1 경로 변수의 개요
경로 변수 (path variables)
- 웹 요청 url 에 포함된 파라미터 값을 전달받는 데 사용하는 변수
- 매핑 경로를 설정하는 @RequestMapping 에 중괄호를 사용하여 웹 요청 url에 포함된 요청 조건 값을 전달받음
- 중괄호 안에 명시된 것이 경로변수 . 하나 또는 그 이상의 경로 변수를 포함할 수 있음.
4.1.2 @PathVariable을 이용한 경로 변수 처리
@PathVariable 은 @RequestMapping 에 설정된 경로 변수의 값을 요청 처리 메서드의 매개변수로 전달 받음.
//경로 변수 이름을 그대로 사용할 때
@RequestMapping("경로 변수")
public String 메서드 이름 (@PathVariable 경로변수 , ...){
... }
//경로 변수 이름을 재정의하여 사용할 때
@RequestMapping("경로 변수")
public String 메서드 이름 (@PathVariable (경로변수) 매개변수 , ...){
...}
-사용자의 웹 요청 url에 포함된 경로 변수의 값은 요청 처리 메서드의 매개변수 데이터 타입에 맞게 자동으로 변환됨.
- 요청 처리 메서드에 @PathVariable 이 선언되 매개변수를 여러 개 설정할 수 있음.
@PathVariable 을 이용하여 경로 변수에 접근하는 예
@Controller
@RequestMapping(" /home")
public class Example01Controller {
@GetMapping ( " /exam01/{bookID}")
System.out.println(" 도서 ID : " + bookID);
return "webpage06";
}
}
@PathVariable 을 이용하여 여러개의 경로 변수에 접근하는 예
@Controller
@RequestMapping(" /home")
public class Example02Controller {
@GetMapping ( " /exam02/{category]/publisher/{publisher}")
public String requestMethod (@PathVariable String category,
@PathVariable String publisher , Model model){
System.out.println(" 도서 분야 : " + category);
System.out.println(" 출판사 : " + publisher);
model.addAttribute(" data", "도서 분야 : " + category + "<br>"
+ "출판사 :" + publisher );
return "webpage06";
}
}
'공부 > Backend' 카테고리의 다른 글
Spring boot (0) | 2024.01.14 |
---|---|
Spring Boot (0) | 2024.01.06 |
SQL 레벨업 9장 , 10장 (2) | 2023.12.02 |
SQL 레벨업 - 8장 (1) | 2023.11.25 |
SQL 레벨업 - 7장 (1) | 2023.11.18 |