김영한의 MVC 강의 내용입니다.
기존에 MVC 학습을 하며 Controller 패턴으로 값을 Model로 View에 전해주는 방식은 알고 있었다.
그치만 이번에 처음 알게된 FrontController를 보고 되게 편리하고 유용하게 쓰이는게 감격스러웠다.
기존 Controller 단 앞에 request를 받는 대표 Controller를 말한다. 모든 요청은 여기서 받으며, 이 후 여러 컨트롤러로 뿌려주는 역할을 한다. 초반에 어떠한 URI로 요청이 들어오는지에 따라 Controller를 배정해주어야 하기에 Mapping 하는 과정을 거치며 이를 활용한다.

@WebServlet(name = "frontControllerV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {
private Map<String, ControllerV1> controllerMap = new HashMap<>();
public FrontControllerServletV1() {
controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
controllerMap.put("/front-controller/v1/members/members", new MemberListControllerV1());
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FrontControllerServletV1.service");
// request로 들어온 URI를 읽는다.
String requestURI = request.getRequestURI();
ControllerV1 controller = controllerMap.get(requestURI);
if (controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
controller.process(request, response);
}
}