Dispatcher ? Redirect ?

2009/02/01 21:42
크리에이티브 커먼즈 라이선스
Creative Commons License
웹 개발을 하다보면 반드시 마주치는게 아닐까 싶다. Redirect ? Dispatcher ? 둘다 하는일은 비슷하지만 동작 원리는 근본적으론 완전히 틀리다. 아마 스트럿츠를 개발해본 사람이 있다면 Dispatcher에 익숙해 있을 것 같다.

쉽게 설명 하자면 Dispatcher는 서버에서 페이지를 돌리고(위임), Redirect는 클라이언트에게 '지정된 페이지로 이동'하라고 지시 한다. 두 방식을 설명할 초간단 서블릿을 작성해 보았다.

DispatcherTest.java

RedirectTest.java

Dispatcher

Dispatcher

Redirect

Redirect


주소창을 보면 확실히 알 수 있다. DispatcherTest.java의 경우 URL은 그대로지만 페이지는 바뀌었다. RedirectTest.java는 URL자체가 바뀌었다. 스트럿츠에서 컨트롤러 -> 뷰 로 이동하는 것이 바로 이렇게 구현 된 것이다. 그렇다고 아무렇게나 막 쓸수 있을까 ..?

그것은 아니다. 단 한번이라도 출력이 되었을 경우(OutputStream을 이용해 출력된 것) IllegalStateException이 발생하게 된다. 이것은 당연한 것이다. 페이지를 전환하려고 하는데 한번이라도 flush를 하게 되면 뭔가 모양이 이상하니 말이다. 그렇다고 반드시 일어나는 것은 아니다.

운이 좋으면 flush가 되지 않으면 예외가 발생하지 않는다. 그렇다고 믿으면 안된다. 이것은 어디까지나 버퍼가 차지 않아 출력하지만 않은것이니까 ....


저작자 표시 비영리 변경 금지

Pupustory Dev/Java

  1. Blog Icon
    무늬만사람
  2. 부장님. 이러시면 안됩니다.