일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다시보자
- HTML Templating
- 즐거운자바
- 웹개발
- vmax
- ES6
- 김성박
- 부정 선택자
- 서블릿
- 깃헙
- jsp
- vmin
- EDWITH
- 보충필요
- 자바
- datalist
- 상속
- 복합 선택자
- nth-of-type()
- 가상클래스 선택자
- nth-child()
- spring
- JavaScript
- 소스트리
- optgroup
- 다시볼 것
- 즐거운 자바
- 부스트코스
- 가상요소 선택자
- 속성 선택자
Archives
- Today
- Total
기억의 DataBase
redirect와 forward 본문
-
리다이렉트(redirect)
리다이렉트는 HTTP프로토콜로 정해진 규칙이다.
서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.
1.
브라우저가 redirect01.jsp를 서버에 요청
2. 요청을 받은 서버는 브라우져에게
redirect01.jsp 파일내의 response.sendRedirect("redirect02.jsp"); 코드에 따라
HTTP 상태코드 302로 응답(response)하게되며,
헤더 내의 Location에 이동할 URL(redirect02.jsp)를 추가하여
브라우져에게 그 URL로 이동할 것을 요청(이 단계가 redirect)
3. 브라우져는 302 코드로 응답받게 되면 헤더내의 Location에 포함된 이동할 URL(redirect02.jsp)로
서버에 재요청을 하게됨 (이때 브라우져의 주소창이 새 URL(redirect02.jsp)로 바뀜)
4. 새로운 요청을 받은 서버는 HTTP 상태코드 200(정상응답)과 함께
새롭게 요청한 URL(redirect02.jsp) 페이지 결과를 브라우져에 돌려줌
※ 서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.
HTTP 서버응답 코드 참고 : https://ooz.co.kr/260
-
포워드(forward)
WAS의 서블릿이나 JSP가 요청을 받은 후 그 요청을 처리하다가,
추가적인 처리를 같은 웹 어플리케이션안에 포함된 다른 서블릿이나 JSP에게 위임하는 경우
추가적인 처리를 같은 웹 어플리케이션안에 포함된 다른 서블릿이나 JSP에게 위임하는 경우
-
웹 브라우저에서 Servlet1에게 요청을 보냄
-
Servlet1은 요청을 처리한 후, 그 결과를 HttpServletRequest 객체에 저장
-
Servlet1은 결과가 저장된 HttpServletRequest 객체와 응답을 위한 HttpServletResponse 객체를
같은 웹 어플리케이션 안에 있는 Servlet2에게 전송(이 단계를 forward라고 함)
-
Servlet2는 Servlet1으로 부터 받은 HttpServletRequest 객체와 HttpServletResponse 객체를 이용하여요청을 처리한 후 웹 브라우저에게 결과를 전송
-
forward Code로 구현
주소가 바뀌지 않았음(Servlet1)
※ redirect와 forward의 차이
redirect는 각기 다른 request, response객체가 2쌍 필요하며, 브라우져의 URL이 바뀐다.
forward는 한쌍의 request, response객체만 필요하며, 브라우져는 한번만 요청하기 때문에 URL이 바뀌지 않는다.
※ RequestDispatcher가 있는 이유, sendRedirect() 와의 차이점
HttpServletResponse를 사용하면 sendRedirect() 메서드를 이용하여 지정한 경로로 제어를 이동시킬 수 있습니다. 그러나 sendRedirect()는 HTTP 리다이렉션을 이용하기 때문에 하나의 요청 범위 안에서 처리를 하는것이 아니라 브라우저에게 Response 후 브라우저측에서 지정받은 요청 경로로 다시 재요청을 하는 방식이기에 두 번의 HTTP 트랜잭션이 발생하며, 서버측에서는 최초에 받은 요청중에 처리한 내용을 리다이렉트 된 요청안에서 공유할 수 없는 문제가 있습니다.
물론 sendRedirect() 에서도 쿠키나 세션등을 이용해 특정 상태를 유지하여 공유할 수는 있겠으나, 상황에 따라 제한적일 수 있으며, 코드 레벨 에서의 알고리즘 등을 곧바로 이어가는데에도 한계가 있기 때문에 좋은 방법이라고 할 수는 없을것입니다.
그대신 HttpServletResponse를 통해 redirect 하는 방식은 현재 어플리케이션 이외에 다른 자원의 경로를 요청할 수 있는 반면 RequestDispatcher는 현재 처리중인 서블릿이 속해 있는 웹 어플리케이션 범위 내에서만 요청을 제어할 수 있습니다.
'JSP&Servlet' 카테고리의 다른 글
Scope - Page, Request, Session, Application (0) | 2019.02.20 |
---|---|
Servlet과 JSP의 연동 (0) | 2019.02.19 |
JSP 문법과 내장객체 (0) | 2019.02.18 |
JSP의 라이프사이클 (0) | 2019.02.18 |
JSP (0) | 2019.02.18 |
Comments