https://www.inflearn.com/course/%EC%9B%B9-mvc
ㅁ 스프링 MVC 설정
ㅇ 스프링 MVC 구성 요소 직접 Bean으로 등록하기
- DispathcerServlet이 필요한 bean들을 객체로 만들고, 몇가지 커스텀 설정을 한 뒤 Bean으로 등록한다.
> HandlerMapping에 Interceptors 설정하기, order 설정하기
> @ResponseBody 가 있을 경우, HandlerAdapter의 message converter가 사용됨
- 너무 low level 설정 방법 (알고만 있으면 될듯)
ㅇ @EnableWebMvc
- delegatingwebmvcconfiguration.class를 import 함
> handlermapping , interceptor 등을 설정하고 bean으로 등록되어있음
> messageCoverter가 handleradapter와 exceptionhandler에 등록됨
- 스프링 부트 나오기 전부터 @EnableWebMvc가 있었음
- annotation 기반 처리 -> RequestMapping~~ 등
- @EnableWebMvc를 설정하면 여러가지 설정이 자동으로 세팅 됨
ㅇ WebMvcConfigurer 인터페이스
- @EnableWebMvc가 제공하는 빈을 커스터마이징 할 수 있는 기능을 제공하는 인터페이스
- contentsnegotiation
- EnableWebMvc와 WebMvcConfigurer가 spring boot 없이 mvc 패턴을 쓰는 과정
> 어디서 제공하는지 구분하며 쓰는게 좋음
ㅇ 스프링 부트의 스프링 MVC 설정
- view resolver과 기본 mvc 설정과 달리 5개 들어가 있음
> contentnegotiating view resolver 가 다른 view resolver를 delegation함
> contentnegotiating view resolver가 최상위 우선순위가 됨
- spring boot autoconfigure라는 dependency에서 dispatcher servlet의 설정을 모두 자동으로 함
- @Configuration + @EnableWebMvc + Imlements WebMvcConfigurer: 스프링 부트의
스프링 MVC 자동설정 사용하지 않음.
- WebMvcConfigurer를 자세히 아는게 좋음 (커스터마이징의 주된 객체)
- Resource 관련하여 prefix (ex) application.properties의 spring.resource. 붙은 변수들 ) 가 있음
( /WEB-INF/ 등등)
- 커스터마이징 방법
● application.properties
● @Configuration + Implements WebMvcConfigurer: 스프링 부트의 스프링 MVC
자동설정 + 추가 설정
● @Configuration + @EnableWebMvc + Imlements WebMvcConfigurer: 스프링 부트의
스프링 MVC 자동설정 사용하지 않음.
ㅇ 스프링 부트에서 JSP 사용하기 & War 파일 배포하기
- ServletInitializer 는 tomcat에 배포할때 사용되는 클래스
- #./mvnw package 로 war로 필드하기
ㅇ WebMvcConfigurer : Formatter설정
- WebConfig 설정
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new PersonFormatter());
}
}
- PersonFormatter 추가
public class PersonFormatter implements Formatter<Person> {
@Override
public Person parse(String s, Locale locale) throws ParseException {
Person person = new Person();
person.setName(s);
return person;
}
@Override
public String print(Person person, Locale locale) {
return person.toString();
}
}
- Controller에서 @RequestParam("name") 으로 받던가, @PathVariable("name")으로 파라미터 받음
- @mockMVc 는 슬라이싱 테스트 => @SpringBootTest + @AutoConfigureMockMvc 로 전환 하여 전체테스트로 진행
ㅇ 도메인 클래스 컨버터
- 스프링 데이터 JPA가 ID 값만 가지고, 자동으로 컨버팅 하여 객체를 찾아줌
ㅇ 핸들러 인터셉터 + 구현
- preHandler - 요청 처리 - PostHandler - 뷰 랜더링 - afterCompletion
- PostHandler와 afterCompletion는 등록된 것의 역순으로 진행됨 ( 2 -> 1 )
PreHandle 1
PreHandle 2
PostHandle 2
PostHandle 1
AfterCompletion 2
AfterCompletion 1
- 서블릿필터 : 일반적인 서블릿 기능은 서블릿 필터로 처리
핸들러 인터셉터 : 핸들러나 모델엔뷰를 받을 수 있으므로, 스프링 MVC 에 특화된 로직을 구현하는데에는 인터셉터
-> XSS는 서블릿필터로 구현해야함 (스프링 MVC 관련 기능이 없음)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new GreetingInterceptor()).order(0);
registry.addInterceptor(new AnotherInterceptor()).addPathPatterns("/hi").order(-1);
}
}
ㅇ 리소스 핸들러
- 이미지, 자바스크립트, css 그리고 html 파일과 같은 정적인 리소스를 처리하는 핸들러를 등록하는 방법
- 디폴트 서블릿 : 서블릿 컨테이너가 기본으로 제공하는 서블릿으로 정적인 리소스를 처리할때 사용
- 스프링 부트 : resource 아래 static directory가 정적서블릿이 처리함
- 캐시를 헤더에 담을수 있음
ㅇ HTTP 메시지 컨버터
- WebMvcConfigurer로 설정 가능
- @RequestBody 로 설정
- 기본 HTTP 메시지 컨버터 : 바이트배열, 문자열, Resource 등
> 어떤것이 사용될까? header에 request type 이 설정되어서 옴
- configureMessageConverters override 하여 설정
> 기본 컨버터들이 사라짐
>> extendMessageConverter로 구현
- 의존성 추가로 컨버터 등록하기 ( 추천)
> 의존성만 추가하면 기본 컨버터로 추가되게 구현되어있음
- webmvcconfigurationsupport : spring mvc 에 있음
- 부트에는 starter-json 에 jackson2json이 있음
- objectMapper를 통해 String -> Json으로 변환 가능 (jackson에 있으며, bean으로 등록되어있음)
- jsonpath(json) 및 xpath(xml) 로 값을 확인할 수 있음
ㅇ 기타 WebMvcConfigurer 설정
- url에 요청파일 같은걸 넣을 수도 있음 ( ex) defian.json)
'Spring' 카테고리의 다른 글
[Spring] 스프링 기반 REST API 개발 - 1 (0) | 2021.08.03 |
---|---|
[Spring] 스프링 웹 MVC - 3 (0) | 2021.08.02 |
[Spring] 스프링 웹 MVC - 1 (0) | 2021.07.27 |
[Spring] 스프링 데이터 JPA - 4 (0) | 2021.07.26 |
[Spring] 스프링 데이터 JPA - 3 (0) | 2021.07.25 |