JSP 전달과 리디렉션의 차이점
이 질문에 이미 답변이 있습니다.
jsp:forward과 의 차이점을 설명해주세요 redirect.
각 경우에 무슨 일이 일어나고 있습니까?
redirect는 응답 상태를 302 [1]로 설정하고
Location헤더에 새 URL 을 설정하고 브라우저에 응답을 보냅니다. 그런 다음 브라우저는 http 사양에 따라 새 URL에 대한 또 다른 요청을합니다.앞으로 전적으로 서버에서 발생합니다. 서블릿 컨테이너는 브라우저가 알지 못하는 상태에서 동일한 요청을 대상 URL로 전달합니다. 따라서 새 URL을 처리 할 때 동일한 요청 속성과 동일한 요청 매개 변수를 사용할 수 있습니다. 그리고 브라우저는 URL이 변경되었음을 알지 못합니다 (전적으로 서버에서 발생했기 때문입니다).
[1] : 이것은 표준에 모순되는 업계 관행의 예입니다. HTTP / 1.0 사양 (RFC 1945)에서는 클라이언트가 임시 리디렉션을 수행해야했지만 (원래 설명 문구는 "임시로 이동") 인기있는 브라우저는 303 See Other 기능으로 302를 구현했습니다. 따라서 HTTP / 1.1은 두 동작을 구별하기 위해 상태 코드 303 및 307을 추가했습니다. 그러나 일부 웹 응용 프로그램 및 프레임 워크는 302 상태 코드를 303 인 것처럼 사용합니다. 소스
리디렉션 및 전달에 대한 흥미로운 설명을 들었습니다. 친구의 서비스가 필요하다고 상상해보십시오. 어떤 서비스인지는 중요하지 않습니다. 친구가 당신을 도울 수는 없지만 누가 할 수 있는지 알고 있다고 가정 해보자.
"내가 처리 할 수는 없지만 누가 할 수 있는지 알아요. 여기 그의 전화 번호입니다. 전화하세요."라고 말하면 그는 귀하의 요청을 리디렉션 할 것입니다.
그는 당신에게 "문제 없어요"라고 말하면 당신의 요청을 전달하고 당신의 욕망을 처리하는 데 다른 사람을 포함시키는 것에 대해 당신에게 알리지 않고 혼자서 그 사람에게 전화를 겁니다. 그러면 친구가 당신의 소원을 정리 한 결과를 받아 당신에게 전달합니다.
리디렉션은 또한 브라우저를 거쳐 브라우저가 새 요청을 할 때까지 기다려야하기 때문에 전달에 비해 속도가 느리므로 리디렉션 후 요청 범위 개체를 사용할 수 없게됩니다.
리디렉션 :
- 사용자가 리소스를 요청합니다.
- 사용자에게 응답을 보냈습니다.
- 요청 된 리소스가 아니며 HTTP 코드 302가 포함 된 응답이며 요청 된 리소스의 URL을 포함합니다.
- URL은 요청 된 URL과 같거나 다를 수 있습니다.
- 클라이언트 브라우저는 새 URL로 리소스를 다시 요청합니다. 이번에는 실제 리소스가 사용자에게 전송됩니다.
앞으로:
요청 된 리소스를 사용자에게 단순히 표시하는 과정입니다. 그것은 전적으로 서버 측에서 발생합니다.
이 게시물 은 멋진 실제 예제를 사용하여 순방향 대 리디렉션에 대한 정말 좋은 설명을 제공합니다.
우유 남자가 와서 집에서 매달 지불을 요청합니다. 여기 집은 컨테이너이고 당신은 컨테이너에 존재하는 자원입니다. Milk man은 클라이언트 또는 브라우저입니다.
그는 당신에게 매월 지불을 요청합니다. 이것은 브라우저가 자원 A에 대한 요청입니다. 집에 들어가 어머니 (같은 용기 안의 다른 자원 B)에게 현금을 요청하고 돌아와서 우유 배달원에게 배달하십시오. 이것은 앞으로 호출됩니다.
우유 배달원에게 집안의 어머니와 대화를 요청하거나 우유 배달원에게 사무실 (다른 도메인)에있는 아버지와 대화를 요청하는 경우이를 리디렉션이라고합니다.
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
| Forwards vs. | Redirects |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
| ServletContext.getRequestDispatcher(location).forward(request,response) | httpServletResponse.sendRedirect(location) |
| Communication between pages directly | Communication b/w pages are indirectly by extra round trip from HTTP client |
| Communication happens within web-container | Communication happens outside web-container |
| Use same Request and Response Object | Use different Request and Response Object |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
요청을 전달할 때
-요청 및 응답 개체가 전송됩니다. -url은 동일하게 유지됩니다.
요청을 다른 JSP / 서블릿으로 리디렉션하면
-요청 및 응답 개체는 새 개체로 전송되지 않습니다. -Url은 새 페이지의 디렉토리로 변경됩니다.
참고 URL : https://stackoverflow.com/questions/6068891/difference-between-jsp-forward-and-redirect
'IT박스' 카테고리의 다른 글
| 텍스트 검색 후 Vim의 하이라이트 제거 (0) | 2020.10.23 |
|---|---|
| LINQ : 개체에 목록의 항목이없는 위치 선택 (0) | 2020.10.23 |
| 패딩을 사용하여 ListView의 스크롤 막대 위치 변경 (0) | 2020.10.23 |
| Vim에서 선택한 줄을 클립 보드에 복사하는 방법 (0) | 2020.10.23 |
| Dapper.NET 및 여러 결과 세트가있는 저장된 proc (0) | 2020.10.23 |