"전달"이라는 용어는이 질문에서 모호합니다. JSP/서블릿 세계에서 MVC 개념에서 "전달"은 요청 URL (브라우저 주소 표시 줄에서 볼 수 있음)이 서블릿 (web.xml
또는 의 URL 패턴과 일치)을 효과적으로 호출하여 모델을 준비하고 JSP를 뷰로 사용하여 모델을 표시합니다. 그 JSP는 차례로 "전달"에 의해 호출되었습니다. 이것은 RequestDispatcher#forward()
에 의해 이루어집니다 : 이것은 참으로 브라우저의 주소 표시 줄에 JSP의 URL을 반영하지 않습니다
request.getRequestDispatcher("/WEB-INF/foo.jsp").forward(request, response);
. 이것은 전적으로 서버 측에서 발생합니다. 기본적으로 서블릿은 JSP를 "로드"하고 요청/응답을 전달하여 HTML 생성 작업을 수행 할 수 있도록합니다. 위 예제의 JSP는 /WEB-INF
폴더에 숨겨져있어 브라우저 주소 표시 줄에 전체 경로를 입력하려는 최종 사용자가 액세스 할 수 없습니다.
일반적으로 웹 개발 세계에서 "전달"이라는 용어는 URL 리디렉션과 본질적으로 동일한 "URL 전달"에서 알려진 입니다. 차례로 브라우저 주소 표시 줄이 변경됩니다. 이것은 JSP/서블릿 세계에서 공식적으로 "리디렉션"으로 알려져 있습니다 (대부분의 시동기는 처음에는이를 전달과 혼동하지만). 이것은 HttpServletResponse#sendRedirect()
에 의해 수행됩니다
response.sendRedirect("another-servlet-url");
기본적으로, 서버는 클라이언트가 주어진 Location
에 대한 새로운 GET 요청을해야 Location
헤더와 HTTP의 3nn 응답하여 클라이언트를 알려줍니다.위 효과적으로 다음과 같습니다 :
response.setStatus(302);
response.setHeader("Location", "another-servlet-url");
는 클라이언트가 작업을 지시하고있다합니다 (웹 브라우저)가있어로서, 당신은이 URL 변화가 다시 브라우저의 주소 표시 줄에 반사되는 참조하십시오.
용어 "URL 재 작성"도 모호합니다. JSP/서블릿 세계에서 URL 재 작성은 세션 ID를 URL에 추가하여 쿠키가없는 브라우저가 서버와 세션을 계속 유지할 수 있도록하는 형식입니다. URL에 ;jsessionid=somehexvalue
속성을 본 적이있을 것입니다. 이것은 기본적으로 자동으로 수행되지 않지만 대부분의 Servlet 기반 MVC 프레임 워크는 자동으로 처리합니다. 이것은 HttpServletResponse#encodeURL()
또는 encodeRedirectURL()
에 의해 수행됩니다
String encodedURL = response.encodeURL(url); // or response.encodeRedirectURL(url)
// Then use this URL in links in JSP or response.sendRedirect().
(차례로 모호한 용어 "URL 인코딩"당신이 일반적으로 percent encoding 생각하는 것으로 -again- 어느 이것에 대한 기능을 제공하는 더 서블릿 API가 없습니다.. 이것은 일반적 JSTL의 <c:url>
및 <c:param>
또는 같은 서블릿 기반 MVC 프레임 워크가 제공하는 UI 요소에 의한 JSP에, MVC-기술적으로 더 정확한을 URLEncoder#encode()
수행하거나 될 JSF의 <h:outputLink>
)
에서 일반적인 웹 개발 (특히 Apache HTTPD/PHP 사용자의 경우) "URL 재 작성"은 Apache HTTPD의 mod_rewrite
이 수행하는 작업 중 클라이언트 측의 URL 변경을 반영하지 않고 들어오는 URL을 콘크리트 리소스로 매핑하는 것으로 알려져 있습니다. JSP/서블릿 세계에서도 이것이 가능하며 일반적으로 을 사용하는 Filter
구현으로 수행됩니다. 잘 알려진 구현은 the Tuckey's URLRewriteFilter입니다.
나는 아파치 HTTPD/PHP 세계에서 나의 뿌리를하면서 난 그냥 확실히, JSP/서블릿으로 시작했을 때 이것은 또한 오랫동안 저를 혼동 것을 인정한다.
귀하의 가정이 잘못되었습니다. 포워딩/리디렉션은 3xx를 브라우저로 보내어 새로운 URL로 이동하여 수행됩니다. –