본문 바로가기

JAVA - Backend/SpringBoot - ApplicationFramework

WebMVC Configuration

1. @Configuration + @EnableWebMvc + WebMvcConfigurer 구현: 스프링 부트의 스프링 MVC 자동 설정 미사용

2. application.properties

3. @Configuration + WebMvcConfigurer 구현: 스프링 부트의 스프링 MVC 자동설정 + 추가 설정

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html

 

WebMvcConfigurer (Spring Framework 5.2.4.RELEASE API)

 

docs.spring.io

Formatter설정 : Formatter Bean으로 등록하면 WebConfig에서 addFormatter 해줄 필요 없음 자동생성
    Printer: 객체 -> 문자열
    Parser: 문자열 -> 객체

@Component
public class PersonFormatter implements Formatter<Person>{
    @Override
    public Person parse(String text, Locale locale) throws ParseException{
        Person person = new Person();
        person.setName(text);
        return person;
    }
    @Override
    public String print(Person object, Locale locael){
        return object.toString();
    }
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry){
        registry.addFormatter(new PersonFormatter());
    }
}

도메인 클래스 컨버터 자동 등록 : @Entity

핸들러 인터셉터 : 로깅, 인증체크, Locale 변경 등 
요청 -> preHandler1 -> preHandler2 -> Handler 요청처리 -> postHandler2 -> postHandler1 -> 뷰 랜더링 -> afterCompletion2 -> afterCompletion1
스프링과 관계없는 기능구현은 서블릿 필터로 구현 : ex) lucy-xss-filter
HandlerInterceptor 구현 및 WebMvcConfigurer 구현체에서 addInterceptors 오버라이딩하여 registry.addInterceptor로 등록 및 .order(숫자)로 실행순서 조절가능 낮은숫자가 먼저 실행 .addPathPatterns("URI") 특정 경로만 적용가능

리소스 핸들러 : 이미지, JS, CSS, HTML 등 정적 리소스 처리 핸들러 등록
스트링 부트 : 기본 정적 리소스 핸들러와 캐싱 제공
- 어떤 요청 패턴을 지원할 것인가
- 어디서 리소스를 찾을 것인가
- 캐싱
- ResourceResolver: 요청에 해당하는 리소스 찾는 전략
- ResourceTransformer: 응답으로 보낼 리소스를 수정하는 전략
- classpath:, file:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/mobile/**")
                .addResourceLocations("classpath:/mobile/")
                .setCacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES));
    }
}

디폴트 서블릿 : https://tomcat.apache.org/tomcat-9.0-doc/default-servlet.html 

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies. The Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket specifications are

tomcat.apache.org

HTTP 메시지 컨버터: 요청 본문에서 메시지를 읽거나(@RequestBody), 응답 본문에 메시지 작성시(@ResponseBody) 사용 주로 의존성 추가로 컨버터 추가함
스프링부트에는 기본적으로 starter-web에 JSON용 컨버터로 Jackson2컨버터가 포함되어 있음 ObjectMapper
jasonPath 문법참고
https://github.com/json-path/JsonPath
http://jsonpath.com

 

JSONPath Online Evaluator

JSONPath Online Evaluator

jsonpath.com

스프링부트에는 XML용 컨버터가 등록되어 있지 않음 : jaxb-api, jaxb-runtime, spring-oxm, Jaxb2Marshaller

CORS 설정 : 같은 도메인에서 온 요청이 아닌경우에도 처리 허용 설정

리턴 값 핸들러 설정

Arguments Resolver 설정

뷰 컨트롤러 설정

비동기 설정

뷰 Resolver 설정

Content Negotiation 설정