✅네이버클라우드 캠프/개발일기

[네이버클라우드캠프] 95일차. 자바 @SessionAttributes, @ModelAttributes

우동한그릇 2023. 9. 11. 17:41
반응형

// request handler 가 뷰 컴포넌트(jsp)에 전달하는 값 중에서 
// 세션에 보관할 값의 이름을 지정하면 
// 프론트 컨트롤러는 그 값을 HttpSession 객체에도 보관해 둔다.
// 또한 @ModelAttribute에서 지정한 이름의 값을 세션에서 꺼낼 때도 사용한다.
// 즉 @SessionAttributes 에 이름을 지정해 두지 않으면 
// 세션에 해당 값이 들어 있어도 
// @ModelAttribute가 붙은 아규먼트에 값을 넣어주지 않는다.
@SessionAttributes({"name2","age2"})

 

// @SessionAttributes에 등록되지 않은 이름의 값은 세션에 보관되지 않는다.
model.addAttribute("tel2", "1111-2222");

 

 

      // @ModelAttribute 에 지정된 이름이 @SessionAttributes에 있는 경우 
      // => 세션에 해당 값이 있으면 아규먼트에 넣어 준다.
      // => 세션에 해당 값이 없으면 예외가 발생한다.

@ModelAttribute("name2") String name2,
@ModelAttribute("age2") String age2,


      
      // @ModelAttribute 에 지정된 이름이 @SessionAttributes에 없는 경우 
      // => 요청 파라미터에 tel2 값이 있다면 그 값을 넣어준다.
      // => 요청 파라미터에 값이 없으면 아규먼트에 빈 문자열을 넣어 준다.
      // => @SessionAttributes에 등록한 이름이 아니기 때문에 세션에서 값을 꺼내지 않는다.

@ModelAttribute("tel2") String tel2) {

 

    //@ModelAttribute

    // 1. @SeesionAttribute에 지정된 이름인 경우
    //  1) @Http객체에 지정된 이름이 없다면, HttpSession 객체에서 꺼내 넘긴다.
    //    없다면 예외가 발생 !

 


    // 2. SessionAttribute에 지정된 이름이 없을 경우
    //  1) 없으면 요청 파라미터에서 값을 꺼내 넘긴다.
    //  2) 그래도 없으면, 빈 문자열을 넘긴다.

 

 

 

# GPT 추가 설명

더보기

`@ModelAttribute` 어노테이션은 Spring MVC 컨트롤러 메서드의 매개변수를 초기화하기 위한 어노테이션으로, 세션(attribute)이나 요청 파라미터(parameter)에서 값을 가져와서 매개변수에 할당할 때 사용됩니다. 주어진 코드 주석에서는 `@ModelAttribute` 어노테이션을 사용할 때의 동작을 설명하고 있으며, 그 동작은 다음과 같습니다:

1. **세션 속성과의 관련:**

    - `@SessionAttributes`에 지정된 이름과 일치하는 경우: `@ModelAttribute` 어노테이션에 지정된 이름이 `@SessionAttributes`에 포함되어 있으면, Spring은 먼저 현재 페이지 컨트롤러의 `HttpSession` 객체에서 해당 이름으로 속성(attribute)을 찾습니다. 이것이 없으면 예외가 발생합니다.

2. **세션 속성이 없을 경우의 동작:**

    - `@SessionAttributes`에 지정된 이름이 없을 경우: 만약 `@ModelAttribute` 어노테이션에 지정된 이름이 `@SessionAttributes`에 없다면, Spring은 요청 파라미터(request parameters)에서 해당 이름의 값을 찾아서 매개변수에 할당합니다.

    - 만약 요청 파라미터에서도 해당 이름의 값이 없다면, `@ModelAttribute` 어노테이션에 지정된 매개변수 타입에 따라 기본값이 할당됩니다. 예를 들어, `String` 매개변수인 경우 빈 문자열(`""`)이 할당됩니다.

따라서 `@ModelAttribute` 어노테이션을 사용하면 세션 및 요청 파라미터에서 값을 가져와서 컨트롤러 메서드에 매개변수로 전달할 수 있으며, 위의 동작 설명대로 동작합니다. 이것은 Spring MVC에서 웹 애플리케이션의 데이터를 매우 편리하게 다루는 데 도움을 줍니다.


 

반응형