본문 바로가기
공부/Backend

Spring boot 3장

by 유스베리이 2023. 12. 30.

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