이번 내용은 리다이렉트 전송시 

parameter를 URL에 붙여서 전송하기 싫어하는 분들을 위한 포스팅입니다.


Spring3 에서 제공하는 RedirectAttributes를 사용하면 

redirect post 구현이 가능합니다.


하지만 일회성입니다. 

새로고침하면 날라가는 데이터이므로 

사용목적에 따라서 사용/불가능 판단을 잘 하셔야 할거 같습니다.


컨트롤러에 일반 GET방식 테스트를위한 컨트롤러를 만들도록 하겠습니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * redirect페이지로 넘기기 위한 컨트롤러
 * @return
 */
@RequestMapping("/redirectpage")
public String redirectpage(){
    return "redirect:/herepage?key1=value1&key2=value2";
}
     
/**
 * redirect되는 컨트롤러
 * @return
 */
@RequestMapping("/herepage")
public String herepage(@ModelAttribute(value="vo") RedirectVo vo){
    return "herepage";
}




herepage 컨트롤러에 return 페이지인 herepage.jsp파일을 views 디렉토리내에 생성 후 

다음과 같이 body 태그에 코드를 추가해보도록 합니다.




1
2
3
<h2>Redirect 페이지</h2>
key1 :: ${vo.key1 }<br/>
key2 :: ${vo.key2 }




리다이렉트 테스트를 위하여 호출을 해보도록 하겠습니다.




http://localhost:포트번호/redirectpage 실행결과







위처럼 화면에 value값이 화면에 출력이 되었습니다.

하지만 브라우저 URL뒤에 PARAMETER값들이 붙어있습니다.

브라우저내에 parameter값이 안붙게끔 RedirectAttributes를 이용해보도록 하겠습니다.


다음 컨트롤러를 추가 해보겠습니다.




1
2
3
4
5
6
7
8
9
10
11
12
/**
 * redirect 신규페이지로 넘기기 위한 컨트롤러
 * @return
 */
@RequestMapping("/redirectnewpage")
public String redirectnewpage(RedirectAttributes redirectAttributes){
    Map<String, Object> map = new HashMap<String,Object>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    redirectAttributes.addFlashAttribute("vo", map);
    return "redirect:/herepage";
}




RedirectAttributes의 addFlashAttribute메서드에 key/value로 웹페이지에 값을 넘겨줄수 있지만 

하나의 key값으로 넘겨주어야 하므로 여러개의 값을 페이지로 넘겨 줄 경우

 list나 map 형태의 객체를 value로 담아서 넘겨주면 되겠습니다.


RedirectAttributes를 이용하여 최초 GET방식으로 REDIRECT 해줬던 RETURN 페이지와 동일합니다.

herepage 컨트롤러의 코드일부를 변경하보도록 하겠습니다.


herepage parameter인 "@ModelAttribute(value="vo") RedirectVo vo" 코드를 삭제해줍니다.

삭제가 되면 다음처럼 코드가 변경되겠습니다.




1
2
3
4
5
6
7
8
/**
 * redirect되는 컨트롤러
 * @return
 */
@RequestMapping("/herepage")
public String herepage(){
    return "herepage";
}




이제 신규 리다이렉트 컨트롤러를 호출해보도록 하겠습니다.




http://localhost:포트번호/redirectnewpage 실행결과






위와같이 URL에 PARAMETER가 붙지않고 정상적으로 웹페이지에 결과값을 출력하였습니다.

하지만 새로고침을 하게된다면?








위와같이 빈값으로 나오게 됩니다.

필요여부에 따라 사용하시면 되겠습니다.



by 개발로짜