Front Controller Pattern

ayleen·2021년 12월 21일
0
post-thumbnail

- 모든 요청을 하나의 Servlet으로 정의하는패턴

- 중복되는 코드나 추적, 보안을 적용할 때 하나의 Servlet파일에서 정의되어있기 때문에 유지보수에 용이





1. controller를 하나로 모아줄 servlet파일을 생성해준다.
기존 코드에서 컨트롤러로 보내주던 파일명 뒤에 .do를 붙여준다.
서블릿 파일에서 맵핑 부분을 '*.do'로 바꿔준다. (.do를 붙여주는 것은 하나의 약속같은 것임)

@WebServlet("*.do")




2. 누가 호출했는지를 구분하기 위해서 url에서 파일명을 가져와준다.

String uri = request.getRequestURI();
String path = request.getContextPath();
String command = uri.substring(path.length()+1);

uri에 '/프로젝트명/컨트롤러.do' 로 담아진다.
path에는 '/프로젝트명'이 담아진다.
'컨트롤러.do'에서 호출했다는 정보를 알아야하기 때문에 uri에서 path를 뺀 값만 가져오면 된다.
path.length() 는 '/프로젝트명' 이므로 uri에서 path.length()를 빼주면 '/컨트롤러.do'가 남게 된다. 앞에 슬래쉬까지 같이 빼주기 위해서 path.length()+1을 해주고 command 변수에 담아준다.



  1. if문으로 컨트롤러중에서 어떤 컨트롤러를 실행해야하는지 찾아준다.
    if문 안에는 기존 컨트롤러 내용을 그대로 가져와준다.
if(command.equals("LoginCon.do")) {
	request.setCharacterEncoding("utf-8");
		
	String email = request.getParameter("email");
	String pw = request.getParameter("pw");
		
	memberDTO dto1 = new memberDTO(email, pw);
	memberDAO dao = new memberDAO();
	memberDTO dto = dao.Login(dto1);
		
	String nextpage = "";
	if(dto != null) {
			
		HttpSession session = request.getSession();
		session.setAttribute("dto", dto);
		response.sendRedirect("main.jsp");
			
	}else {
		response.sendRedirect("LoginFalse.jsp");
			
	}
}



같은 방법으로 다른 컨트롤러들도 모두 else if문으로 가져와준다.

profile
asdf

2개의 댓글

comment-user-thumbnail
2021년 12월 21일

이때까지 본 정리중에 제일 잘하셨습니다.
내용은 적지만요 ㅎㅎ

1개의 답글