본문으로 바로가기

[Spring] 스프링 웹 MVC - 2

category Spring 2021. 7. 28. 16:45

https://www.inflearn.com/course/%EC%9B%B9-mvc

 

스프링 웹 MVC - 인프런 | 강의

이 강좌는 자바 서블릿(Servlet) 기반의 MVC 프레임워크인 스프링 웹 MVC(이하 스프링 MVC)에 대해 학습합니다., 스프링 웹 MVC 이 강좌는 자바 서블릿(Servlet) 기반의 MVC 프레임워크인 스프링 웹 MVC(이하

www.inflearn.com

 

ㅁ 스프링 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