redirect
: 사용자의 url을 강제적으로 redirect 경로로 이동시키라는 의미
접두사로 redirect: 을 하면 forward가 아닌 redirect 시킴
/main 설정
@Controller
public class MainController {
@RequestMapping("/main")
public void main() {}
}
메인페이지에 버튼 생성하고 string-redirect 로 이동 경로 설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center"> 뷰 리졸버를 이용한 뷰 연결하기 </h1>
<h3> 문자열로 redirect 하기</h3>
<button onclick="location.href='string-redirect'">문자열로 뷰 이름 반환하여 리다이렉트</button>
확인을 위한 알럿창
<script>
const message = decodeURIComponent('${ param.message }').replace("+", " ");
if(message){
alert(message);
}
</script>
Controller파일에 redirect할 핸들러메소드 작성
@Controller
public class ResolverConrtroller {
@GetMapping("/string-redirect")
public String stringRedirect(Model model) throws UnsupportedEncodingException {
redirect시 기본 타입 데이터를 model에 추가하면 url의 parameter가 됨(쿼리스트링으로)
model.addAttribute("message", URLEncoder.encode("문자열로 리다이렉트함", "UTF-8"));
=>인코딩하지 않으면 알럿창에 한글값 출력x
main으로 재요청하도록 강제화
return "redirect:main";
}
결과 화면
=> URL에 메세지 값이 쿼리스트링으로 나옴.
RedirectAttributes의 addFlashAttribute 메소드
: RedirectAttribute에 addFlashAttribute를 하면 redirect 했을 경우에도 requestScope에서 값을 꺼내 쓸 수있음
내부적으로 세션에 임시로 값을 담고 소멸시키기 때문에 세션에 동일한 키 값이 존재하면 덮어쓰기 될 수 있으니 유의!
◎ addFlashAttribute 메소드 사용하여 redirect하기
메인페이지에 버튼 생성하고 string-redirect-attr 로 이동 경로 설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<button onclick="location.href='string-redirect-attr'"> 문자열 redirect하면서 flashAttr 사용하기</button>
<script>
addFlashAttribute를 하면 redirect 했을 경우에도 requestScope에서 값을 꺼내 쓸 수 있음
const flashMessage = '${ requestScope.flashMessage }';
if(flashMessage){
alert(flashMessage);
}
</script>
</body>
</html>
Controller파일의 핸들러 메소드에 RedirectAttribetes 전달하고 addFlashAttribute사용하여 redirect하기
@Controller
public class ResolverConrtroller {
@GetMapping("/string-redirect-attr")
public String stringRedirectFlashAttribute(RedirectAttributes rttr) {
rttr.addFlashAttribute("flashMessage","리다이렉트 attr 사용하여 리다이렉트함");
return "redirect:main";
}
}
화면 결과
=> 인코딩하지 않아도 한글 출력 가능. 쿼리스트링 없이 main URL 만 요청됨.
ModelAndView
: 모델과 뷰를 합친 개념.
핸들러 어댑터가 핸들러 메소드를 호출하고 문자열을 ModelAndview로 만들어 DispatcherServlet에 반환하는데
이 때 문자열을 반환해도 되지만 ModelAndView를 미리 만들어서 반환할 수도 있음.
@Controller
public class ResolverConrtroller {
@GetMapping("/modelandview")
public ModelAndView modelAndView(ModelAndView mv) {
mv.addObject("message", "ModelAndView를 이용한 모델과 뷰 반환"); 반환할 데이터
mv.setViewName("result"); 반환할 뷰
return mv;
}
}
ModelAndView를 RedirectAttributes사용하여 redirect하기
@Controller
public class ResolverConrtroller {
@GetMapping("/modelandview-redirect-attr")
public ModelAndView modelAndViewRedirectFlashAttribute(ModelAndView mv, RedirectAttributes rttr) {
rttr.addFlashAttribute("flashMessage", "모델앤드뷰를 리타이렉트 attr사용하여 리다이럭트함");
mv.setViewName("redirect:main");
return mv;
}
}
'프로그래밍 > Spring & Spring boot' 카테고리의 다른 글
[Spring/스프링] 파일 업로드 (single file , multi file ) (0) | 2022.09.11 |
---|---|
[Spring/스프링] SimpleMappingExceptionResolver / @ExceptionHandler 사용하여 예외 처리 (0) | 2022.09.07 |
[Spring / 스프링] @RequestBody (0) | 2022.09.06 |
[Spring/스프링] @SessionAttributes를 이용하여 session에 값 담기 (0) | 2022.09.06 |
[Spring / 스프링] @ModelAttribute를 이용하여 파라미터 전달 받기 (0) | 2022.09.06 |