포워딩(forwarding) 이란
Servlet 또는 JSP에서 요청을 받은 후 직접 처리하지 않고
다른 component에(다른 페이지) 요청을 넘기는 것을 포워딩이라 한다.
JSP를 이용한 포워딩 방법에는 2가지가 있다.
첫 번째는 request 클래스의 getRequestDispatcher를 이용하는 방법이다.
RequestOBJ라는 Servlet파일을 만들었다.
request 내장객체에 setAttribute로 id와 pw라는 값을 저장했다.
이후 getRequestDispatcher메소드를 이용하여 request객체를 포워딩할 준비와 포워딩할 주소를 지정해준다.
dispatcher.forward 메소드를 통해 포워딩을 하면
위에서 언급한 twenty-six/dispatcherjsp.jsp 페이지로 request와 response객체를 포워딩 시켜준다.
(넘겨준다, 위임해준다)
이후 twenty-six폴더안의 dispatcherjsp.jsp의 내용이다.
request.getAttribute를 이용하여 id와 pw정보를 출력한다.
페이지를 실행했을 때
만약 이 페이지로 정보가 잘 넘어왔다면 RequestOBJ에서 설정한 Id값과 pw값이 나올것이다.
정보가 잘 출력된 모습이다.
하지만 출력된 내용은 dispatcherjsp.jsp의 내용이지만
url를 보면 requestOBJ의 url인것을 볼 수 있다.
requestDispatcher는 포워딩 했을시
url은 유지한채 페이지의 내용만 바꿔주는것을 알 수 있다.
requestdispatcher 내장객체의 정보를 유지하며 포워딩 해주는 메소드이다.
두 번째는 response 객체를 이용한 response.sendRedirect 메소드이다.
redirect.jsp 파일의 내용이다.
request객체에 id와 pw값을 세팅한 후
sendRedirect 메소드를 이용하여 RequestOBJ2 서블릿 파일로 넘겨준다.
그리고 RequestOBJ2 에서는 request객체를 받아서 출력한다.
redirect.jsp 파일을 실행해보자
오잉?? id와 pw같이 null이다.
잘 보면 URL값이 RequestOBJ2로 변한것을 알 수 있다.
앞서 실행했던 requestDispatcher사용시에는
포워딩 해준 페이지를 출력하고 있지만 URL값은 변하지 않았는데
이번에는 URL값도 같이 변한것을 알 수 있다.
Dispatcher는 포워딩시 request내장객체의 정보를 유지한상태로 포워딩 하지만
sendRedirect는 포워딩시 URL값이 바뀌며 request내장객체도 새롭게 초기화되기 때문에
redirect.jsp파일에서 request객체에 세팅한 Attribute값이 소멸됨을 알 수 있다.
한마디로
dispatcher = URL안바뀜, request객체 재사용
redirect = URL바뀜, request객체 재사용 안함.
'개발' 카테고리의 다른 글
Git 설치와 시작하기 (repository와 로컬저장소 연결) (0) | 2019.08.05 |
---|---|
이클립스 Server Tomcat v8.5 Server at localhost failed to start 오류 발생시 (화병사망 막는법) (3) | 2019.06.10 |
개발 도중 실수로 이클립스 메뉴를 꺼버렸을 때 (0) | 2019.06.06 |
생산성을 높이는 윈도우10 단축키 모음 (0) | 2019.02.04 |
JSP 모델1과 모델2의 차이 (0) | 2019.01.30 |