코드로 배우는 스프링 웹 프로젝트 책을 보면서 했음!
새로고침을 해서 악의 적인 사용자가 도배를 하는 것을 막기 위해 리다이렉트를 이용하는 방법
목록 페이지를 보기 위해서 BoardController.java를 아래와 같이 수정합니다.
@RequestMapping(value = "/register", method = RequestMethod.POST) public String registPOST(BoardVO board, Model model) throws Exception {
logger.info("regist post ......"); logger.info(board.toString());
service.regist(board);
model.addAttribute("result", "success");
// return "/board/success"; return "redirect:/listAll"; } |
- listAll
즉 submit을 누르면 목록 페이지로 이동하게 수정했음!
RedirectAttributes를 이용한 숨김 데이터의 전송
Result=SUCCESS 문자열은 지워지지 않고 남기 때문에 페이지를 ‘새로 고침’ 했을 때 계속 남는 문제점이 있습니다.
Spring의 RedirectAttributes 객체는 리다이렉트 시점에 한 번만 사용되는 데이터를 전송할 수 있는 addFlashAttribute()라는 기능을 지원합니다.
현재 BoardController.java 파일의 registPost()를 아래와 같이 수정합니다.
@RequestMapping(value = "/register", method = RequestMethod.POST) public String registPOST(BoardVO board, RedirectAttributes rttr) throws Exception {
logger.info("regist post ......"); logger.info(board.toString());
service.regist(board);
// model.addAttribute("result", "success");
// return "/board/success";
rttr.addFlashAttribute("msg", "success"); return "redirect:/listAll"; } |
addFlashAttribute()는 브라우저까지 전송되기는 하지만, URI 상에는 보이지 않는 숨겨진 데이터의 형태로 전달됩니다.
결과 페이지인 listAll.jsp에서는 약간의 JavaScript를 사용해서 화면에 결과를 보여주는 용도로 사용할 수 있습니다.
orz.zerock.controller.BoardController의 일부
<script> var result = '${msg}';
if (result == 'success') { alert("처리 완료"); } </script> |
'JAVA > spring' 카테고리의 다른 글
select Implementation (0) | 2019.08.08 |
---|---|
spring redirection (0) | 2019.08.07 |
register(등록), success(등록 성공) (0) | 2019.07.04 |
spring homapage (0) | 2019.06.14 |
Spring CreateTest (0) | 2019.06.13 |
댓글