본문 바로가기

Programming/JSP

JSP, javscript, etc : request에 대해서 redirect를 할 때 주의점.

우선 먼저 귀뜸하자면, jsp라고만 국한시켜놓기는 하였으나 이는 php, asp 등의

server side script에서도 동일하게 적용될 것으로 생각됩니다.

또한, 이 포스팅은 상세한 redirect 방법 code를 적진 않습니다^^; 그저 주의해야할 부분만 적을 따름입니다;;


예전에도 많았으나 특히나 최근에 mobile의 os에 따라서, 혹은 desktop일 경우에 대하여

관련 요청을 처리하기 위해 redirect를 통해 분기를 하는 경우가 잦을 것입니다.


이때 방법은 제가 알기론 3가지정도가 있습니다.

meta정보를 통해서와 javascript를 통해서, 그리고 마지막으로 server side script를 통해서이죠.

meta정보는 거의 못보았고 저 역시도 안쓰기 때문에 제쳐두더라도

javascript 는 document.location.href = "target url"; 요런 식으로 자주 쓸 것입니다.

server side script(jsp 기준) 를 사용할 경우에는 response.sendRedirect("target url"); 머 이런식으로 작성하겠죠.

이 2가지의 redirect 방법은 명확한 차이점이 있습니다.

server 에 request를 보냈느냐? 보내지 않았느냐? 입니다.


javascript를 사용할 경우엔 header정보를 변경하지 않고 url만 target url로 변경하게 됩니다.

이는 redirect를 통해서 페이지를 이동하였다 하더라도 사용자가 다시 뒤로가기 기능을 수행한다면

이전 페이지의 redirect 되기 이전의 화면이 보이게 된다는 것입니다.


server side script나 servlet 등의 server side에서 redirect 기능을 수행하게 될 경우 server에서 redirect가 발생함으로

사용자는 뒤로가기 기능을 수행한다면 server에 action을 취하기 전의 화면을 보게 됩니다.


이 두 가지의 차이점을 명확히 알고 목적에 맞게 코드를 작성하지 않는다면 유저가 뒤로가기 기능을 수행함으로

같은 일을 반복할 수도 있겠죠? 


여기서 첨언을 좀 하자면,

jsp 에서는 sendRedirect를 할 경우에 이후의 code를 모두 수행하고 redirect가 발생하게 됩니다.

혹은 buffer가 모두 차게되면 바로 flush하게 되므로 프로그래머가 의도치 않은 화면을 사용자에게 보여줄 수 있습니다.

이 부분은 추후에 상세히 다뤄보겠습니다. ㅎㅎ 저를 위해서요 ㅎㅎㅎ

여튼, 따라서 이후 코드에 대해서 더이상 수행이 무의미할 경우에 바로 return 등을 통해서 현재의 수행중인 코드를

마치도록 하여야겠습니다. 

(jsp 소스들은 톰캣에서 알아서 servlet과 같은 형태로 변환하여 줍니다. 따라서 return을 함은 전혀 이상치 않습니다. :) )