2013-07-23 1 views

답변

6

페이지는 웹 응용 프로그램 외부에서 액세스 할 수 없습니다.

이제 HttpServletResponse#sendRedirect()를 사용하기 때문에, 새로운 요청이 클라이언트에 의해 생성되므로 요청은 실제로 브라우저에서 전송되는, 따라서 당신은 sendRedirect에 경로에 WEB-INF을 가질 수 없습니다. RequestDispatcher의 경우

, 방법 - forward()include()은, 오히려이 /가 가장 아마도 서블릿에서 다른 페이지를 포함하려면 앞으로 에 같은 요청을 사용하여 새 요청을 생성하는 클라이언트를 요구하지 않습니다 컨트롤러. 웹 응용 프로그램 내부에서만 액세스하므로 파일에 대한 경로를 WEB-INF 아래에 지정할 수 있습니다.

+0

감사합니다. 아름답게 설명되어 있습니다. – user2610044

+0

@ user2610044. 당신은 환영합니다 :) –

+0

안녕하세요 Rohit ..이 책은 SCJP에 대해 제안합니까 ..? – user2610044

2

WEB-INF 디렉토리는 웹 응용 프로그램의 개인 영역이므로 WEB-INF 디렉토리 아래의 모든 파일은 URL을 지정하여 브라우저에서 직접 액세스 할 수 없습니다. 웹 컨테이너는이 디렉토리의 내용을 제공하지 않습니다. 그러나 WEB-INF 디렉토리의 내용은 응용 프로그램 내의 클래스/서블릿에서 액세스 할 수 있습니다.

sendRedirect() 새 브라우저 request을 만듭니다. 리디렉션은 헤더를 다시 브라우저/클라이언트로 보냅니다. 이 헤더에는 브라우저에서 리디렉션 할 URL이 들어 있습니다. 그런 다음 브라우저는 주어진 URL에 대한 새로운 요청을 시작합니다. include()/forward() 같은

RequestDispatcher 방법은 내부적으로 작동합니다. 호출이 이루어진 곳에서 서버 내에서 사용 가능한 자원에/전달합니다. 이러한 제어의 이전은 컨테이너에 의해 내부적으로 수행되며 브라우저/클라이언트는 관련되지 않습니다.

Servlet spec 3.0 Directory Structure-10.5

특별한 디렉토리는 "WEB-INF"라는 응용 프로그램 계층 내에 존재 읽어보십시오. 이 디렉토리에는 문서 루트 응용 프로그램과 관련이없는 모든 응용 프로그램이 포함되어 있습니다. 대부분의 WEB-INF 노드는 공개 문서 트리의 일부가 아닙니다. WEB-INF/lib 디렉토리에있는 JAR 파일의 METAINF/ 자원에 패키지 된 정적 자원과 JSP를 제외한 WEB-INF 디렉토리에있는 다른 파일이 클라이언트에 직접 제공되지 않을 수 있습니다. 컨테이너. 그러나, WEB-INF 디렉토리의 내용은의 getResource를 사용하여 코드 서블릿에 볼 수 있습니다과 같이 getResourceAsStream 방법은 의 ServletContext에 호출하고, RequestDispatcher의 호출을 사용하여 노출 될 수 있습니다.

3

RequestDispatcher 앞으로 방법은 클라이언트 브라우저에 요청 파견에 대해 아무것도 말하지 않고 다른 서블릿 또는 JSP에 대한 요청의 제어를 전달합니다.따라서 서버 측에서는 요청 발송이 완전히 이루어 지므로 요청의 추가 처리를 중지하고 URL 상태 코드 "301"와 클라이언트 브라우저로 리디렉션 될 위치의 URL을 보내려면 경로

sendRedirect 메서드를 지정할 수 있습니다. 응답 헤더. 리디렉션 관련 HTTP 헤더를 클라이언트 브라우저로 보낸 후 서버가이 요청을 제어 할 수 없습니다. 클라이언트 브라우저는 http 상태 301을보고 서버가 설정 한 "위치"http 헤더의 URL에 새로운 요청을 보내야한다는 것을 알고 있습니다. 클라이언트 브라우저는 새 URL로 새 요청을 보내고 다른 일반 요청으로 서버에서 처리합니다. 따라서 sendRedirect는 클라이언트 브라우저를 통해 처리되므로 경로 지정이 작동하지 않습니다.

관련 문제