[Spring] Spring MVC - 기본 구조 (0805)

왕감자·2024년 8월 6일

KB IT's Your Life

목록 보기
116/177

Spring MVC


✅ 프로젝트 구조


✅ 프로젝트 내부 구조


✅ 모델 2



* 기본 구조

🔸 Spring MVC 라이프 사이클

* 처리 순서

Filter ➔ DispatcherServlet ➔ HandlerMapping ➔ HandlerInterceptor ➔ Controller ➔ Service ➔ Repository(Mapper) ➔ ViewResolver


Filter

  • Web Application의 전역적인 로직 담당
  • DispatcherServlet에 들어가기 전 Web Application단에서 실행

DispatcherServlet

  • HandlerMapping에게 Request에 대해 매핑할 Controller 검색 요청
  • HandlerMapping으로부터 Controller 정보를 받아 해당 Controller와 매핑

HandlerMapping

  • 검색 요청받은 Controller 찾아 리턴
//요청별로 Map을 가짐
    Map<String, Command> getMap;
    Map<String, Command> postMap;

    //접두어,접미어
    String prefix = "/WEB-INF/views/";
    String suffix = ".jsp";

    public void init() {
        getMap = new HashMap<>();
        postMap = new HashMap<>();
        createMap(getMap, postMap);
    }

HandlerInterceptor

  • Request가 Controller에 매핑되기 전 앞단에서 부가적 로직 추가
  • 주로 세션, 쿠키, 권한 인증 로직에 많이 사용

Controller

  • Request와 매핑
  • Request에 대해 어떤 로직(Service)으로 처리할 것인지 결정
  • 그에 맞는 Service 호출
  • Service Bean을 스프링 컨테이너로부터 주입

Service

  • 데이터 처리 및 가공을 위한 비즈니스 로직 수행
  • Request에 대한 실질적 로직 수행
  • Repository를 통해 DB에 접근, 데이터의 CRUD 처리

Repository(DAO, Data Access Object)

  • DB에 접근하는 객체
  • Service에서 DB에 접근할 수 있게 하여 데이터의 CRUD 처리

View Resolver

  • Controller에서 리턴한 View 이름을 DispatcherServlet으로부터 넘겨 받음
  • 해당 View로 forward
String prefix = "/WEB-INF/views/";
String suffix = ".jsp";
public void execute(Command command, HttpServletRequest request, HttpServletResponse response)
        throws  IOException, ServletException {
   String viewName = command.execute(request, response);

   if(viewName.startsWith("redirect:")) {
       response.sendRedirect(viewName.substring("redirect:".length()));
   } else {
       String view = prefix + viewName + suffix;
       request.getRequestDispatcher(view).forward(request, response);
   }
}

0개의 댓글