Spring MVC를 이용한 웹 페이지 작성 실습 - accidentlywoo/legacyVue GitHub Wiki
Spring MVC를 이용한 웹 페이지 작성 실습
학습 목표
Spring MVC를 이용해 프로젝트를 구성할 수 있고, 개발자가 작성해야 할 파일이 무엇인지 이해한다.
Spring MVC를 이용해 웹 어플리케이션을 작성할 수 있다.
핵심 개념
DispatcherServlet
WebApplicationInitializer
@RequestMapping = @GetMapping = @PostMapping
DispatcherServlet을 FrontController로 설정하기
web.xml 파일에 실행
javax.servlet.ServletContainerInitializer 사용
: 서블릿 3.0 스팩 이상에서 web.xml파일을 대신해서 사용할 수 있다.
org.springframework.web.WebApplicationInitializer 인터페이스를 구현해서 사용
WebApplicationInitializer를 구현해서 설정하기 1/2
Spring MVC는 ServletContainerInitializer를 구현하고 있는 SpringServletContainerInitializer를 제공한다.
SpringServletContainerInitializer는 WebApplicationInitializer 구현체를 찾아 인스턴스를 만들고 해당 인스턴스의 onStartup 메소드를 호출하여 초기화한다.
Spring MVC 설정
@Configuration
org.springframework.context.annotation의 Configuration 애노테이션과 Bean 애노테이션 코드를 이용하여 스프링 컨테이너에 새로운 빈 객체를 제공할 수 있다.
@EnableWebMvc
DispatcherServlet의 RequestMappingHandlerMapping, RequestMappingHandlerAdapter, ExceptionHandlerExceptionResolver, MessageConverter 등 Web에 필요한 빈들을 대부분 자동으로 설정해준다.
ComponentScan 애노테이션을 이요아면 Controller, Service, Repository, Component 애노테이션이 붙은 클래스를 찾아 스프링 컨테이너가 관리하게 된다.
DefaultAnnotationHandlerMapping과 RequestMappingHandlerMapping 구현체는 다른 핸들러 매핑보다 훨씬 더 정교한 작업을 수행한다. 이 두 개의 구현체는 애노테이션을 사용해 매핑 관계를 찾는 매우 강력한 기능을 가지고 있다. 이들 구현체는 스프링 컨테이너 즉 애플리케이션 컨텍스트에 있는 요청 처리 빈에서 RequestMapping애노테이션을 클래스나 메소드에서 찾아 HandlerMapping 객체를 생성하게 된다.
HandlerMapping은 서버로 들어온 요청을 어느 핸들러로 전달할지 결정하는 역할을 수행한다.
DefaultAnnotationHandlerMapping은 DispatcherServlet이 기본으로 등록하는 기본 핸들러 매핑 객체이고, Request MappingHandlerMapping은 더 강력하고 유연하지만 사용하려면 명시적으로 설정해야 한다.
@EnableWebMc 를 이용하면 기본적인 설정이 모두 자동으로 되지만, 기본 설정 이외의 설정이 필요할 경우 해당 클래스를 상속 받은 후, 메소드를 오버라이딩 하여 구현한다.
Controller(Handler) 클래스 작성하기
@Controller 애노테이션을 클래스 위에 붙인다.
매핑을 위해 @RequestMapping 애노테이션을 클래스나 메소드에서 사용한다.
@RequestMapping
Http 요청과 이를 다루기 위한 Controller 의 메소드를 연결하는 어노테이션
Http Method 와 연결하는 방법
: @RequestMapping(value="/users", method=RequestMethod.POST)
: From Spring 4.3 version (@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, PatchMapping)
Http 특정 해더와 연결하는 방법
: @RequestMapping(methid = RequestMethod.GET, headers = "content-type=application/json")
Http Parameter 와 연결하는 방법
: @RequestMapping(method = RequestMethod.GET, headers = "content-type=application/json")
Content-Type Header와 연결하는 방법
: @RequestMapping(method = RequestMethod.GET, consumes = "application/json")
Accept Header 와 연결하는 방법
: @RequestMapping(method = RequestMethod.GET, produces = "application/json")