Untitled

FrontControllerServletV1 - 프론트 컨트롤러 
package hello.servlet.web.frontcontroller.v1;
import hello.servlet.web.frontcontroller.v1.controller.MemberFormControllerV1;
import hello.servlet.web.frontcontroller.v1.controller.MemberListControllerV1;
import hello.servlet.web.frontcontroller.v1.controller.MemberSaveControllerV1;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@WebServlet(name = "frontControllerServletV1", 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", new
	MemberListControllerV1());
	}
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse
	response)
	throws ServletException, IOException {
	System.out.println("FrontControllerServletV1.service");
	String requestURI = request.getRequestURI(); ControllerV1 controller = controllerMap.get(requestURI);
	if (controller == null) {
	response.setStatus(HttpServletResponse.SC_NOT_FOUND);
	return;
	}
	controller.process(request, response);
	}
}

모든 컨트롤러에서 뷰로 이동하는 부분에 중복이 있고, 깔끔하지 않다.

java String viewPath = "/WEB-INF/views/new-form.jsp"; 
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); 
dispatcher.forward(request, response); 

이 부분을 깔끔하게 분리하기 위해 별도로 뷰를 처리하는 객체를 만들자.

request 객체를 Model로 사용하는 대신에 별도의 Model 객체를 만들어서 반환하면 된다.