171124 FrontController, Command 패턴 - RYUDONGJIN/Memo_wiki GitHub Wiki

url-pattern

  • 디렉터리 패턴 : 디렉터리 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조.
    http://localhost:8181/jsp_21_1_ex1_memberex/Hello -> /Hello 서블릿
  • 확장자 패턴 : 확장자 형태로 서버의 해당 컴포넌트를 찾아서 실행하는 구조.
    http://localhost:8181/jsp_21_1_ex1_memberex/hello.do -> *.do 서블릿

FrontController 패턴

  • 클라이언트의 다양한 요청을 한 곳으로 집중시켜, 개발 및 유지보수에 효율성을 극대화.
요청1 ---|
요청2 ---|--->  모든 요청을 처리하는 서블릿 ---> DAO
요청3 ---|
	<a href="insert.do2">insert</a>
	<hr />
	<a href="http://localhost:8181<%=request.getContextPath()%>/update.do2">update</a>
	<hr />
	<a href="http://localhost:8181/loginForm/select.do2">select</a>
	<hr />
	<a href="${pageContext.request.contextPath}/delete.do2">delete</a>
private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("actionDo");
		
		String uri = request.getRequestURI();
		System.out.println("uri : " + uri);
		String conPath = request.getContextPath();
		System.out.println("conPath : " + conPath);
		String command = uri.substring(conPath.length());
		System.out.println("command : " + command);

		if(command.equals("/insert.do")){
			System.out.println("insert");
			System.out.println("----------------");
		}else if(command.equals("/update.do")){
			System.out.println("update");
			System.out.println("----------------");
		}else if(command.equals("/select.do")){
			System.out.println("select");
			System.out.println("----------------");
		}else if(command.equals("/delete.do")){
			System.out.println("delete");
			System.out.println("----------------");
		}
	}

Command 패턴

  • 클라이언트로부터 받은 요청들에 대해서, 서블릿이 작업을 직접 처리하지 않고, 해당 클래스가 처리하도록 한다.
                                                             interface
요청1 ---|                                         ---> | 요청1 처리 클래스 |
요청2 ---|--->  모든 요청을 직접 처리하지 않는 서블릿 ---> | 요청2 처리 클래스 | ---> DAO
요청3 ---|                                         ---> | 요청3 처리 클래스 |
⚠️ **GitHub.com Fallback** ⚠️