2013-08-20 2 views
3

서블릿이 있습니다. 이 서블릿을 http://someDomain/MyServlet/URLPattern으로 치고 있습니다. 이 서블릿의 doGet 메소드에서 WEB-INF 폴더 아래에있는 JSP 페이지로 전달 중입니다. 아래의 index.jsp 페이지에서 코드,request.getHeader ("referer")가 전달 및 리디렉션과 함께 작동하는 방식은 무엇입니까?

request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); 

이며, POST 방법을 사용하여 다른 URL (서블릿)을 타격하고있다. 대상 서블릿의 doPost 방법에서

, 이것은 내가이가 실제 지점에서이 때부터이 http://someDomain/../index.jsp을 반환 생각

http://someDomain/MyServlet/URLPattern

같은 값을 출력 request.getHeader("referer"))

를 사용하여 referer을 얻고있다 대상 URL에 트리거가 발생했습니다.

이 동작을 이해하고 싶습니다. 어떤 사람이 그 행동을 설명하는 공인 된 소스 로 답을 얻을 수 있다면 큰 도움이 될 것입니다.

위의 질문과 대답 내용은 forward와 (과) 일치합니다. sendRedirect에 대한 동작은 무엇입니까? 이고 어떤 값은 referer입니까?

답변

3

전달은 서버 측에서 완전히 발생하며 브라우저는이를 인식하지 못합니다.

전달은 서버 측 로직의 내부 메소드 호출과 같습니다. 따라서 URL이 http://someDomain/MyServlet/URLPattern이고 브라우저가 보낸 고유 한 GET 요청에 응답하기 위해 여러 서버 측 구성 요소 (서블릿, JSP)가 URL http://someDomain/MyServlet/URLPattern에 사용됩니다.

브라우저가 알고있는 유일한 점은이 URL에 GET 요청을 보내고 응답이 반환되었음을 나타냅니다. 따라서 다음 요청의 리퍼러는이 URL이됩니다.

비유하자면, 아마존에서 책을 구입한다고 가정 해 봅니다. 그 책은 어디에서 구입 했습니까? 아마존에서 샌프란시스코의 5 번 방 # 453의 방에서 "아마존에서"대답하지 않을 것입니다. 귀하의 비즈니스가 아니기 때문에 아마존에서만 알 수 있습니다. 아마존에서 책을 구입하여 책을 구입했습니다. . 아마존은 책이 브라우저, 그리고 아마존의 서버입니다. 알 수없는이 이야기에서

.

sendRedirect() 완전히 다른 것입니다. 당신은 서버에 첫 번째 요청을 보내 당신을 보내 내부적으로 무슨 짓을, sendRedirect()를 사용하여 다른 URL을 가리키는 Location 헤더를 포함하는 HTTP 응답을 보냅니다. 브라우저가 두 번째 요청을 다른 URL로 보냅니다.

+0

그래서'sendRedirect() '를 사용했다면 '다시 ferer'을'http : // someDomain /../ index.jsp'로 만드시겠습니까? – user2488578

+0

네,하지만 그렇게해서는 안됩니다. 첫째로 작동하지 않기 때문에 : WEB-INF하에 놓인 JSP는 바깥에서 접근 할 수 없다. 둘째, JSP가 요청을 직접 받아서는 안되기 때문입니다. 요청은 컨트롤러 (서블릿)를 거쳐야하며 컨트롤러는 컨트롤러 (Controller)가 준비한 모델을 사용하여 마크 업을 생성하는 역할을하는 뷰 (JSP)로 전달해야합니다. 일반적으로 참조 된 헤더를 사용하는 것은 나쁜 생각입니다. 요청의 출처는 신경 쓰지 않아야하며 일부 브라우저는 어쨌든 리퍼러 헤더를 전송하지 않습니다. –

+0

감사합니다 :) 그것은 매우 도움이되었습니다. – user2488578

관련 문제