잡다한 내 인생의 기록

[자바 Servlet] response.sendRedirect() 사용시 유의점 본문

프로그램/코딩

[자바 Servlet] response.sendRedirect() 사용시 유의점

알 수 없는 사용자 2014. 12. 15. 21:46
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

JSP 페이지 내 자바 코딩 또는 Java Servlet 사용시

완전히 다른 페이지로 이동해야 할 경우가 있다.


그럴때 response.sendRedirect() 함수를 사용하여 페이지를 변경해주는데,


Servlet의 경우 특정 상황이 아닌 이상 attribute 값을 넘겨줄 경우가 많아

forward 등을 통해 마지막에 해당 페이지로 넘겨주게 된다.


이러한 소스가 마지막 부분에 있다면,

이 점을 유의하자.


.... doPost(....) {

    ......

    

    // 특정 상황에서 다른 페이지로 넘겨주고 싶어 이렇게 코드를 넣었다.

    if(data == null) {

        res.sendRedirect("http://antiqueh.tistory.com/");

    }


    // data가 있다면 다음의 코드를 통해 attribute를 jap 페이지에 넘겨준다.

    req.setAttribute("result", result);

    RequestDispatcher rd = req.getRequestDispatcher("/Page");

    rd.forward(req, res);

}

[대략적인 오류 소스]



.... doPost(....) {

    ......

    

    // 특정 상황에서 다른 페이지로 넘겨주고 싶다.

    /*

    if(data == null) {

        res.sendRedirect("http://antiqueh.tistory.com/");

    } else {

        // data가 있다면 다음의 코드를 통해 attribute를 jap 페이지에 넘겨준다.

        req.setAttribute("result", result);

        RequestDispatcher rd = req.getRequestDispatcher("/Page");

        rd.forward(req, res);

    }

}

[redirectTo 함수는 이렇게 추가되어야 한다.]


위의 내용이 왜 중요한지 의아해 할수도 있겠다.

하지만 if문으로(다른 방법도 있지만, 가장 간단히 설명하기 위해 if문을 사용했다.) 감싼 중요한 이유는 여기에 있다.

sendRedirect 함수를 거친다고 해도 바로 페이지가 리다이렉팅 되는 것이 아니라,

다음에 나오는 소스들이 줄줄이 실행되므로, 앞에 놓건 뒤에 놓건 간에

forward 함수를 타고 정상페이지로 넘어가버리게 된다.


그렇기에 redirect를 적용하려면 페이지를 넘기는 다른 부분들은 명확히 분리해야 한다.


이 부분을 간과하지 않도록 기억해두자.