일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- javascript
- 주말이다..
- 프로젝트
- 공부
- 웹
- Java
- 객제지향
- 프로그래밍
- 객체지향
- 객제지향프로그래밍
- 공부를열심히
- squery
- Project
- html
- 테이블
- orcle
- sql
- 웹프로그래밍
- UI
- 객체지향프로그래밍
- ERWin
- 데이터베이스
- 오라클
- 코딩
- jsp
- 자바
- Oracle
- DB
- web
- CSS
- Today
- Total
햄찌개
JAVA - Servlet -redirect, forward 본문
1. Redirect
Server가 client 요청에 대해 특정 URL로 이동을 다시 요청하는 rule입니다.
Redirection인 경우 클라이언트에서 서버로 요청을 보내면 클라이언트 요청을 처리 후 리다이렉트 메소드가 호출되면 Client 브라우저에 응답을 보내며 이 응답에는 브라우저가 웹 컨테이너의 응답을 받은 후 location 에 새롭게 Redirection 될곳의 주소를 넣어서 보낸다.
여기에서 하나의 요청이 종결되고, 새로부여받은 URL로 Client 브라우저에서 새롭게 요청하기 때문에 이전 요청 스코프에 저장되어 있던 request 객체는 소멸된다.
클라이언트 브라우저 상단의 URL 창에도 새로운 요청이 만들어져 넘어가므로 리다이렉션되는 곳으로 URL 주소가 바뀐다.
요청객체를 지우고 다시 만드므로 시간이 소요됨.
리다이렉트는 클라이언트를 통해서 해당 페이지를 다시 요청하도록 만듭니다. 따라서 request객체와 response객체를 새로 생성하게 됩니다.
현실의 상황을 예로 쉽게 이해해봅시다
- 고객(클라이언트)이 상담원(서버)에게 어떤 번호 123(URL)으로 상담(Resource)를 요청합니다
- 서버는 고객에게 안내를 해줍니다. "고객님 해당 상담내용(Resource)은 다른 부서 124로 다시 문의해주시겠습니까? "
- 고객은 다시 124로 문의해서 일처리를 합니다.
2. Forward
요청이 포워딩 될때는 해당 요청이 서버의 다른자원(서블릿, JSP)에 전달된다.(Request 객체 재활용), 이때 이 요청을 처리하는것을 클라이언트(브라우저)에게 알리지 않고, 이런방식의 처리는 웹 컨테이너 내부에서만 일어나므로 클라이언트는 알수없게 된다.
서블릿컨테이너에서 이를 해석하여, 즉 컨테이너 안에서 해석을 한다는 의미. 그래서 forward한 곳으로 자원을 이용하여 응답을 만들어 보내게 된다.
클라이언트는 이 사실(포워드된 사실)을 전혀 알지 못하고 그래서 URL 창의 주소가 처음 요청했던 주소 그대로 있게 되는 것이다.
요청 객체를 재성성 하지 않으므로 Redirect보다 빠르다.
포워딩은 클라이언트와 통신없이 서버에서만 처리되기 때문에 리다이렉트보다 빠르다.
포워드(건내주기)는 서버내에서 다른 파일을 로드합니다(서버 —> 서버로이동). 이 때 클라이언트(브라우저)는 페이지의 이동을 알지 못하며 request와 response객체를 공유(가지고 감)합니다. 따라서 페이지를 이동하며 requset객체를 통해서 데이터를 넘겨줄 때는 반드시 포워드를 사용해야 합니다.
현실의 상황을 예로 쉽게 이해해봅시다
- 고객(클라이언트)이 상담원(서버)에게 어떤 번호 123(URL)으로 상담(Resource)를 요청합니다
- 상담원은 해당 요청에 모르는 부분은 옆의 직원에게 답을 얻습니다.
- 상담원이 고객의 상담을 처리해줍니다.
redirect와 forward 차이점?
<정리>
redirect는 URL이 변경되고, request 객체를 재사용하지 않습니다. (2개의 request요청은 서로 다른 인스턴스!!)
forward는 URL이 변경되지 않습니다. request 객체를 재사용합니다. (하나의 reqeust)
* forward는 Web Container의 내부에서 이동하므로 request, response 객체 공유가 가능합니다:)
이러한 차이점 때문에 적절하게 선택해서 사용해야합니다.
정리하면,
redirect 방식 : 시스템( session , DB)에 변화가 생기는 요청(로그인, 글작성, 회원가입) 같은 경우에 적합합니다.
forward 방식 : 시스템에 변화가 생기지 않는 단순 조회(검색) 같은 경우에 적합합니다.
글쓰기 같은 경우 글을 작성하고 forward로 건네주기를 했을 경우 사용자가 새로고침을 할 경우에 요청정보가 그대로 살아있어 똑같은 글이 여러 번 작성될 수 있습니다. 하지만, redirect로 하면 다른 URL로 요청을 보내므로 글 작성이 여러 번 수행되지 않습니다
'고급 JAVA' 카테고리의 다른 글
JAVA - Servlet (0) | 2020.10.20 |
---|---|
JAVA - 디자인패턴 (0) | 2020.10.19 |
JAVA -JSON (0) | 2020.10.19 |
JAVA - HTTP 프로토콜 (0) | 2020.10.19 |
JAVA -RMI, Remote Method Invocation (자바 원격함수호출) (0) | 2020.10.15 |