1) 사용자가 특정 페이지에 경로로 직접 접근하는 경우를 막아야할 때가 있다. 이럴 경우 서버에서 내부로만 접근할 수 있도록 view 페이지들을 WEB-INF 안에 넣어준다. WEB-INF 안에 들어간 페이지들은 사용자가 경로로 직접 접근할 수 없다.(로그인 상태에서 회원 기능을 사용하는 페이지들)
*test.jsp에 경로로 직접 접근을 시도했지만 찾을 수 없다고 404 에러 메시지가 나온다.
2) 이럴땐 test.jsp로 서버 내부에서 접근하는 Servlet을 만들어준다.
3) Servlet에서 다른 페이지로 접근을 도와주는 메소드로 forwarding과 redirect가 있다.
일단 forwarding을 사용했을 때 전체 순서를 생각해보면 : client -> server -> container(servlet —forwarding—> 경로servlet) -> client 순으로 이루어진다. 처음 request가 그대로 경로servlet까지 전달되므로 그 request의 데이터도 유지되어 전달된다.
이와 달리 redirect를 사용했을 때 전체 순서를 생각해보면 : client -> server -> container(servlet) —redirect—> client -> container(경로 servlet) —> client 순으로 이루어진다. 처음 request가 redirect 해주는 servlet까지만 전달되고 client가 경로servlet으로 다시 request하므로 처음 request의 데이터가 유지되지 않고 다시 request를 보내게된다. 우리가 대부분의 웹 사이트의 회원가입을 했을 시 로그인 안된 초기화면을 보여주는 경우를 생각하면 된다.
*메소드를 보면 forwarding은 request이고 redirect는 response인걸 알 수 있다. redirect는 client에게 경로Servlet으로 client에게 접근할 경로를 응답해주는 것으로 생각할 수 있다.
4) 그러므로 WEB-INF에 view 페이지들을 숨겼을 경우 redirect를 사용하면 사용자가 접근이 불가하므로 forwarding 방법을 사용해야 한다.