15주차 - Spring (3) Controller의 return
이번의 목표
01. Controller의 return에 대해 알아보자.
Spring framwork에서 Controller 클래스에서 return은 view를 변경합니다.
이전시간에는 return값에는 jsp 파일의 이름이 들어간다 했습니다.
이번에는 그 외에도 return의 값에 들어 가는 두가지 방법에 대해 더 알아보겠습니다.
두괄식으로 얘기하자면 두 방법은 forward와 redirect를 사용한 방법입니다.
forward와 redirect의 차이를 알고 있지 않다면 Spring에서 return값이 redirect일때와 forward가 어떻게 다른지 이해하는데 애로사항이 있을 수 있습니다.
>> 12주차 - jsp (14) 속성(Attribute), Redirect와 forward <<
우선 첫번째로 알아볼것은 가장 기본적인 return 값의 형태입니다.
Mapping된 메서드의 return값에는 이동하고자 하는 jsp 파일의 이름이 입력됩니다. 코드 예시는 아래와 같습니다.
@RequestMapping("name")
public String name(){
return "name";
}
return에 파일명이 입력되는 경우 서버에서는 viewResolver에게 이를 전달하여 jsp파일을 찾아 실행 후 클라이언트에게 전달합니다.
그리고 추가로 알아둘 것은 이때에 이동할 페이지로 속성값을 넘겨줘야하는 때가 있다면 기존에 사용하던 session을 사용하는 방법도 있지만 이제는 Model 이라는 빈을 사용할 수도 있습니다. 사용 방법은 세션에 속성을 저장하는 것과 동일합니다.
model 이라는 변수로 만들어두었을 때의, 사용 예시는 아래와 같습니다.
model.addAttribute("이름","값")
이를 이용하여 이동한 페이지에서 el식으로 손쉽게 값을 사용할 수 있습니다.
※ViewResolver는 실행할 View를 찾아 해당하는 view를 실행하는 기능을 합니다.
두번째는 redirect를 사용한 return입니다.
사용 예시는 아래와 같습니다.
@RequestMapping("name")
public String name(){
return "redirect:name";
}
redirect를 사용하면 요청 경로를 클라이언트에게 전달하고 클라이언트는 이를 받아 서버로 다시 요청을 합니다.
viewResolver를 사용하여 view를 보여주던 기존의 방법과의 차이입니다.
그리고 특징으로 기억할 것은 request가 두번 일어난다는 것과 url의 변화입니다.
요청이 두번 일어나는 것은 redirect의 특징입니다. url이 바뀌는 것도 redirect가 view만 보여주는 것이 아니라 새로운 요청으로 작동되기 때문입니다. 두 특징 모두 redirect와 forward를 비교하며 배웠던 내용입니다.
하지만 스프링에선 jsp 파일로 접근하는게 아니라 매핑값에 따라 작동되다보니, 이 부분이 했갈리기가 쉬운 부분인것같습니다.
그리고 이때에 기억할 것으로 redirect를 이용할 때에는 Model을 이용하여 값을 넘길 수 없다는 것입니다.
이때 사용하는 빈으로 RedirectAttributes가 있습니다.
ra라는 변수로 만들어두었을때, 이를 이용한 코드 작성은 아래와 같습니다.
ra.addFlashAttribute("이름","값");
이렇게 하면 받는 페이지에서도 el로 손쉽게 값을 사용할 수 있습니다.
마지막은 forward를 사용한 return 입니다.
사용 예시는 아래와 같습니다.
@RequestMapping("name")
public String name(){
return "forward:name";
}
forward는 사실상 jsp파일만 입력하는 것과 같다고 생각하시면 됩니다.
forward를 입력하지 않고 파일명만 입력했을때 디폴트 형식이 forward이기 때문입니다.