시작은 언제라도

3. FrontControllerServlet ex3 본문

Web programming/Patterns

3. FrontControllerServlet ex3

row_a_boat 2021. 4. 18. 17:28
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
		String command = request.getParameter("command");
		Controller c= HandlerMapping.getInstance().create(command);
		try {
			String view= c.execute(request, response);
			request.getRequestDispatcher(view).forward(request, response);
		} catch (Exception e) {
			response.sendRedirect("error.jsp");
			e.printStackTrace();
		}
		
	}

HandlerMapping을 추가함으로, Front Controller의 코드를 간결하게 만들었다. 사장님은 이제 이 ex3 서블릿에서 excute(req,res)만 해주면 된다는 소식에 사장님들은 굉장히 기뻐한다.

 

//singleton pattern 적용됨

public class HandlerMapping {
	private static HandlerMapping instance= new HandlerMapping();
	private HandlerMapping() {}
	public static HandlerMapping getInstance() {
		return instance;
	}
	public Controller create(String command) {
		Controller c = null;
		if(command.equals("FindCar")) {
			c=new FindCarController();
		}
		return c;
	}
}

 

HandlerMapping:

이제 기존에 FrontController에서 하던 routing은 HandlerMapping이 맡는다구, 이 command는 FindCar과 일치해서 findcar메서드를 써줘야 되는군. FindCarController로 보내줘, 

public class FindCarController implements Controller{

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String url = null;
		String carNo = request.getParameter("carNo");
		String carInfo = MockDAO.getInstance().findCarInfo(carNo);
		if(carInfo==null) {
			url="findcar-fail.jsp";
			
		}else {
			url="findcar-ok.jsp";
			request.setAttribute("carInfo", carInfo);
			}
		return url;
	}
		
	}

 

FindCarController :

사장님(frontcontroller)이 execute를 명령했다구? 어디보자 command의 value가 FindCar과 일치하네, 그럼 내가 일할 차례군.

request.getParameter("carNo")로 손님의 차번호를 확인했는데 MockDAO에 존재하는 차번호군, 자 결과는 findcar-ok.jsp에서 확인하도록 하겠습니다, 그전에 servlet과 jsp 사이에선 String 값으로만 이동가능하니 requeset.setAttribute("carInfo",carInfo)로 jsp에 넘겨주도록 하겠습니다 손님. 

'Web programming > Patterns' 카테고리의 다른 글

Model2 MVC Pattern  (0) 2021.04.20
Command Design Pattern  (0) 2021.04.18
2. FrontControllerServlet ex2  (0) 2021.04.18
1. FrontControllerServlet ex1  (0) 2021.04.18
Design Pattern 이란?  (0) 2021.04.18