[Servlet & JSP] Dispatcher-Servlet (디스패처 서블릿)

JUNBEOM PARK·2022년 4월 8일
1

🍎 Servlet & JSP

목록 보기
2/3
post-thumbnail

🤔 Dispatcher-Servlet ?

디스패처 서블릿의 dispatch는 "보내다"라는 뜻이다.
디서패처 서블릿은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller) 이다.


Dispatcher-Servlet의 장점

과거에 모든 서블릿을 URL 매핑을 위해 web.xml에 모두 등록해주어야 했지만, Dispatcher-Servlet은 해당 어플리케이션으로 들어오는 모든 요청을 핸들링 해주고 공통 작업을 처리 하면서 편리하게 이용할 수 있게 되었다. 즉, 컨트롤러를 구현해두기만 하면 Dispatcher-Servlet가 알아서 적합한 컨트롤러로 위임 해주는 구조가 되었다.



Dispatcher-Servlet 동작 과정

  1. 클라이언트의 요청을 디스패처 서블릿이 받음
  2. 요청 정보를 통해 요청을 위임할 컨트롤러를 찾음
  3. 요청을 컨트롤러로 위임할 핸들러 어댑터를 찾아서 전달
  4. 핸들러 어댑터가 컨트롤러로 요청을 위임
  5. 비지니스 로직 처리
  6. 컨트롤러가 반환값을 리턴
  7. 핸들러 어댑터가 반환값을 처리
  8. 서버의 응답을 클라이언트로 반환



결론

디스패처 서블릿을 통해 요청을 처리할 컨트롤러를 찾아서 위임하고, 그 결과를 받아온다.



예제

@WebServlet("/CalServlet")
public class CalServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public CalServlet() {
        super();
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//num1, num2 값을 받아서 합을 구하기
		int num1, num2 = 0;
		String name = "";
		
		request.setCharacterEncoding("utf-8"); // 한글 깨짐 방지를 위한 인코딩 작업
		num1 = Integer.parseInt(request.getParameter("num1")); 
		num2 = Integer.parseInt(request.getParameter("num2"));
		name = request.getParameter("userName");
		
		int result = num1 + num2;
		
		request.setAttribute("result", result); 
		request.setAttribute("userName", name);
		
		RequestDispatcher re = request.getRequestDispatcher("/basic/result.jsp");
		re.forward(request, response);
	}

}

참고자료
https://mangkyu.tistory.com/18
https://riimy.tistory.com/87
https://velog.io/@seculoper235/2.-DispatcherServlet-%EC%9D%B4%EB%9E%80
https://coder-in-war.tistory.com/entry/Spring-06-Spring-MVC-Framework%EC%99%80-Dispatcher-Servlet

profile
DB 엔지니어👍

0개의 댓글