forward 구조 : B 전달
Include 구조 : A+B 전달 : 페이지 모듈화
클라이언트는 1번의 주소만 알고 있음. A가 모든 업무 처리했다고 생각. :dispatch구조
Defines an object that receives requests from the client and sends them to any resource (such as a servlet, HTML file, or JSP file) on the server.
1,2번 요청, 응답이 끝나자마자 b의 입장에서는 3번의 요청이 다시 오는 것인지 새로운 것인지 모름.
2번은 바디가 없는 응답을 보낸다. : 300번대 코드 >> 3번의 요청을 유도 : Head에 Location 정보를 담아 보내는 것.
B는 새로운 요청으로 받아들임.
Dispatch와 redirect
>> 차이점 : 원본구조를 가지고 분기하느냐, 아니면 원본구조 따로하고 b요청으로 다시 새로 보내느냐
<h4>웹어플리케이션에서 흐름 제어(A->B) 방법</h4>
<pre>
1. Request Dispatche(요청분기)
- Forward : 요청은 A(서블릿)로 응답은 B(JSP 활용케이스가 많음.)에서만 처리됨(Model2 구조에서 활용). 서버사이드 위임 처리 방식.
<%
String path = "/04/standard.jsp";
// RequestDispatcher rd = request.getRequestDispatcher(path);
// rd.forward(request, response);
// rd.include(request, response);
%>
<%-- <jsp:include page="<%=path %>"/> --%>
<%-- //action구조, buffer에 의해서 중간에 들어갈 수 있다. --%>
- Include : 요청은 A로 전송->서버내에서 B로 이동->A로 복귀
(최종 응답은 A+B의 형태로 전송, A가 B를 내포함.)=>페이지 모듈화에서 활용
2. Redirect
요청은 A로 전송 -> Body 가 없고, 상태코드가 3xx 인 응답 전송(Location 헤더 포함) ==> connectLess, stateLess
-> Location(B) 방향으로 새로운 요청 전송 -> B에서 최종 응답 전송.
301/302 : 원본 요청(A)에 대한 정보가 삭제된 후, GET 방식의 새로운 요청이 redirection.
POST->Redirect->GET ==> PRG 패턴 처리구조.
307 : REST 처리에서 많이 활용되며, PUT/DELETE 요청에서 활용.
원본 요청이 발생하고, redirection 될때, 원본의 method 와 body 를 복사해서 새로운 요청이 발생함.
<%--
response.sendRedirect(request.getContextPath() + path);
//클라이언트가 300번대받아서 다시 요청해야하기 때문에 클라이언트가 사용할 수 있는 주소를 보낸다.
--%>
</pre>
https://developer.mozilla.org/ko/docs/Web/HTTP/Status/307
307 Temporary Redirect - HTTP | MDN
원래 요청한 메소드와 Body 를 재사용하여 요청을 리다이렉트 합니다. 여기서 메소드를 GET으로 바꾸기 위해서 303 See Other를 사용하시면 됩니다. 이것은 PUT요청에 업로드된 리소스가 아닌 "You succes
developer.mozilla.org
302= 원본요청에 대한 정보 지움
307 = 클라이언트가 알고있는 이전 요청에대한 메서를 그대로 가지고 보낸다.
request의 body를 복사하여 보낸다. get방식은 복사할 대상이 없으니까 parameter로 보낼 수 없다.
put 메서드에서 주로 발생한다. get과 post에서는 307을 거의 만나지 않는다. 거의 302...
나중에 스프링 사용하면 put메서드 사용하게 되어서 307 만난다.
'내가 보려고 정리하는 > Spring' 카테고리의 다른 글
웹 : SOLID원칙에 맞춰 5Layered Model2 방식 만들기 : 0314 (0) | 2023.03.14 |
---|---|
웹 : (sw아키텍처/디자인패턴 루틴 시작__), include, page 모듈화, bootstrap : 0313 (2) | 2023.03.13 |
웹 : 응답상태코드 : 0308 (0) | 2023.03.08 |
웹:0307 (0) | 2023.03.07 |
웹 : R.Body, 마샬링, 직렬화 : 0306 (0) | 2023.03.06 |