모각코 5주차 모임 결과 (22.08.05 / 금요일 / 13시 ~ 16시 / Google Meet)

KIMA·2022년 8월 5일
0
post-thumbnail

목표

  • 프로그래머스 강의 듣기

결과

Servlet을 Controller로 동작시키는 방법

방법1. web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>org.prgms.kdt.order.servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

방법2. Annotation

@WebServlet(value = "/*", loadOnStartup = 1)
public class TestServlet extends HttpServlet {}

방법3. Spring에서 제공해주는 WebApplicationInitalizer interface 구현 클래스 생성

public class OrderWebApplicationInitializer implements WebApplicationInitializer {

    private static final Logger logger = LoggerFactory.getLogger(OrderWebApplicationInitializer.class);

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        logger.info("Starting Server...");

        var servletRegistration = servletContext.addServlet("test", new TestServlet());
        servletRegistration.addMapping("/*");
        servletRegistration.setLoadOnStartup(1);
    }
}

등록 옵션

  • loadOnStartUp
    • 1 : 서버가 시작할 때, Servlet의 인스턴스 생성
    • -1 : 해당 Servlet 요청이 들어왔을 때, Servlet의 인스턴스 생성

Spring MVC 동작 흐름

Spring MVC 동작 흐름

  1. 클라이언트가 보낸 모든 HTTP 요청을 Dispatcher Servlet이 받음
  2. Dispatcher Servlet은 요청을 처리해줄 컨트롤러와 메서드가 무엇인지 Handler Mapping에게 물어봄
    • Handler Mapping은 xml이나 java 파일의 어노테이션을 참고해서 해당 요청에 대한 컨트롤러와 해당되는 메서드를 mapping해줌
  3. Dispatcher ServletHandler Adapter에게 결정된 컨트롤러와 해당 메서드에 대한 실행을 요청
  4. Handelr Adapter가 결정된 컨트롤러와 해당 메서드를 어댑터 패턴으로 적절히 실행
  5. 컨트롤러가 생성한 Modelview nameDispatcher Servlet에게 전달
  6. 적절한 view resolver를 통해 view name을 적절한 view로 mapping
  7. mapping된 viewModel을 전달한 다음 viewDispatcherServlet 에게 전달
  8. DispatcherServlet이 해당 view를 HTTP 응답 body에 실어서 클라이언트에게 전달

Reference
1. 프로그래머스 백엔드 데브코스
2. Spring MVC 동작과정

profile
안녕하세요.

0개의 댓글