본문 바로가기
JSP, Servlet/Summary

JSP/Servlet : FrontController Pattern, Command Pattern

by autumnly 2017. 1. 23.


url pattern

- 디렉터리 패턴

디렉터리형태로 서버의 해당 서블릿을 찾아 실행

http://localhost:8181/경로명/서블릿이름


- 확장자패턴

확장자를 통해 해당 서블릿을 찾아간 뒤 서블릿 내에서 각 이름에 맞는 코드를 실행

http://localhost:8181/경로명/이름.확장자명

ex) 확장자명이 do 인 경우 *.do 로 맵핑된 서블릿을 찾아가게 된다.

    같은 확장자를 가진 경우 모두 같은 서블릿으로 연결된다.


이와 같이 요청하면

1
<a href="http://localhost8181<%=request.getContextPath()%>/update.do"> update </a>
cs


이렇게 맵핑된 서블릿 파일로 가게된다.

1
@WebServlet("*.do")
cs


서블릿 파일에서는 다음과 같이 do확장자를 가진 여러 요청들을 구분하여 처리한다.

1
2
3
4
5
6
7
8
9
string uri = request.getRequestURI();
String conPath = request.getContextPath();
String command = uri.substring(conPath.length());
 
if(command.equals("/insert.do")){
    //처리내용
}else if(command.equals("/update.do")){
    //
}
cs




FrontController 패턴

여러 클라이언트의 요청이 각각의 서블릿으로 가기 전, 한 곳으로 먼저 집중시켜 처리한다.

개발 및 유지보수를 더욱 효율적으로 할 수 있다.




Command 패턴

여러 클라이언트의 요청을 하나의 서블릿으로 집중시킨 뒤, 그 서블릿에서 처리하지 않고 해당 클래스가 처리하게 한다.



서블릿에서 다음과 같이 작업하여 해당하는 작업(selectAll.do)을 SelectAllService 라는 클래스로 연결한다.

1
2
3
4
5
6
7
8
9
10
11
12
if(command.equals("/selectAll.do")){
    response.setContentType("text/html; charset=EUC-KR");
    PrintWriter writer = response.getWriter();
    writer.println("<html><head></head><body>");
    
    Service service = new SelectAllService();
    ArrayList<MemberDto> dtos = service.execute(request, response);
 
    //for문으로 dtos의 값을 읽어서 출력
 
    writer.println("</body></html>");
}
cs


SelectAllService클래스는 Service 인터페이스를 구현한다.

이 클래스를 통해 dao에 접근하여 데이터베이스의 정보를 얻는다.

1
2
3
4
5
6
7
8
9
10
11
public class SelectAllService implements Service{
    public SelectAllService(){
    }
 
    @Override
    public ArrayList<MemberDto> execute(HttpServletRequest request, HttpServletResponse response){
 
    MemberDao dao = MemberDao.getInstance();  //싱글톤객체
    return dao.membersAll();
    }
}
cs