@WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form")
public class MvcMemberFormServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = req.getRequestDispatcher(viewPath);
dispatcher.forward(req, resp);
}
}
dispatcher.forward() 는 다른 서블릿이나 jsp로 이동하는 기능이다. 서버 내부에서 다시 호출이 발생하므로 url은 변화하지 않는다.
반대로 redirect() 는 실제 클라이언트(브라우저) 까지 응답이 갔다가, 클라이언트가 redirect로 다시 요청하는 것을 의미한다. 그렇기에 url 변경이 발생한다.
url로, 외부에서 직접적으로 접근할 수 없는 경로이다. (WAS 룰)
WEB-INF 디렉토리에 접근하기 위해선 내부 컨트롤러에서 forward를 이용해야 한다.
jsp는 화면을 그리는 역할에 충실하다.
하지만 서블릿 컨트롤러의 경우 중복이 많고, 반복되는 패턴이 나타난다.
또 컨트롤러의 entry가 여러곳으로 분포되어 있어 공통기능 처리가 어렵다. (수문장 역할을 하는 것처럼 진입점이 하나로 되게끔) -> Front Controller