본문 바로가기

웹/JAVA

[JAVA] HandlerMapping

특징

  • 스프링 FC에는 HandlerMapping라는 멤버변수가 있다.
  • POJO이다.
  • 특정 키 값에 대해 특정 값을 반환해준다.
    • Map의 특징
private Map<"key", "value"> 변수명;
  • getAction()에서 값을 가져오기 위해 자체 메서드인 HandlerMapper()을 이용한다.
  • 대표적인 Factory패턴을 사용하는 클래스이다.

역할

  • 사용자의 요청정보에 알맞는 Controller(객체)를 반환해준다.

예제

FC

@WebServlet("*.do") // new 가 사실은 작성되어있었던것!!!!!
public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private HandlerMapper handler;
	
	public FrontController() {
		super();
		handler=new HandlerMapper();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}
	
	private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String uri=request.getRequestURI();
		String cp=request.getContextPath();
		String commend=uri.substring(cp.length());
		System.out.println("FC : "+commend);

		Action action=handler.getAction(commend);
		// 나한테 Action 객체주라~~
		// => 팩토리 패턴 : 요청에 대해 알맞는 객체를 반환하는 패턴
		// HM 가 가장 대표적인 팩토리 패턴을 활용하는 클래스
		ActionForward forward = action.execute(request, response);
		
		if(forward.isRedirect()) {
			response.sendRedirect(forward.getPath());
		}
		else {
			RequestDispatcher dispatcher=request.getRequestDispatcher(forward.getPath());
			dispatcher.forward(request, response);
			// pageContext.forward(forward.getPath());
		}
		
	}
}

HandlerMapper

@WebServlet("*.do") // new 가 사실은 작성되어있었던것!!!!!
public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	private HandlerMapper handler;
	
	public FrontController() {
		super();
		handler=new HandlerMapper();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request, response);
	}
	
	private void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String uri=request.getRequestURI();
		String cp=request.getContextPath();
		String commend=uri.substring(cp.length());
		System.out.println("FC : "+commend);

		Action action=handler.getAction(commend);
		// 나한테 Action 객체주라~~
		// => 팩토리 패턴 : 요청에 대해 알맞는 객체를 반환하는 패턴
		// HM 가 가장 대표적인 팩토리 패턴을 활용하는 클래스
		ActionForward forward = action.execute(request, response);
		
		if(forward.isRedirect()) {
			response.sendRedirect(forward.getPath());
		}
		else {
			RequestDispatcher dispatcher=request.getRequestDispatcher(forward.getPath());
			dispatcher.forward(request, response);
			// pageContext.forward(forward.getPath());
		}
		
	}
}

 

 

 

' > JAVA' 카테고리의 다른 글

[JAVA] web.xml  (0) 2024.01.18
[JAVA] Listener와 Filter  (0) 2024.01.18
[JAVA] 동적 크롤링  (0) 2024.01.15
[JAVA] <Servlet> sendRedirect와 forward  (0) 2024.01.08
[웹] 파비콘  (0) 2023.12.27