
Controller는 클라이언트의 요청을 받아 DAO를 연동하고 페이지 전환을 위해 redirect를 할것인지, forward로 보낼 것인지 결정한다.
클라이언트의 요청이 다양해질수록 Controller의 복잡성이 커질 것이고, 요청에 따라 if~ else문으로 분기하는 작업이 번거롭게 된다. 따라서, 클라이언트의 모든 요청을 받는 FrontController와 각각의 세부 Controller인 POJO를 생성함으로써 하나의 Controller가 수행하는 작업을 분담할 필요성이 있다.

String url = request.getRequestURI();
String ctx = request.getContextPath();
String command = url.substring(ctx.length());
public class HandlerMapping {
private HashMap<String, Controller> mappings;
Controller controller = null;
String nextPage = null;
public HandlerMapping() {
mappings = new HashMap<String, Controller>();
mappings.put("/memberRegister.do", new MemberRegisterController());
mappings.put("/memberContent.do", new MemberContentController());
mappings.put("/memberDelete.do", new MemberDeleteController());
mappings.put("/memberInsert.do", new MemberInsertController());
mappings.put("/memberList.do", new MemberListController());
mappings.put("/memberUpdate.do", new MemberUpdateController());
}
public Controller getPOJO(String key) {
return mappings.get(key);
}
}
public String requestHandler(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
MemberDAO dao = new MemberDAO();
ArrayList<MemberVO> list = dao.memberList();
request.setAttribute("list", list);
return "WEB-INF/member/memberList.jsp";
}
if(nextPage != null) {
if(nextPage.indexOf("redirect:") != -1) {
response.sendRedirect(nextPage.split(":")[1]);
} else {
RequestDispatcher rd = request.getRequestDispatcher(nextPage);
rd.forward(request, response);
}
}
- 모든 클라이언트의 요청을 FrontController에서 받는다.
- FrontController에서 HandlerMapping으로 요청url을 보낸다.
- HandlerMapping에서 FrontController로 url에 해당하는 POJO객체를 반환한다.
- FrontController에서 POJO객체를 사용하여 DAO연동, 객체바인딩을 시키고 nextPage를 반환받는다.
- nextPage를 기반으로 FrontController에서 Redirect 또는 Forward를 결정한다.
이렇게 유용한 정보를 공유해주셔서 감사합니다.