AbstractAnnotationConfigDispatcherServletInitializer를 extends 한다.
AbstractAnnotationConfigDispatcherServletInitializer class를 상속하고 사용하는 서브클래스는
주로 웹 애플리케이션의 초기 설정을 담당한다.
extends하면 구현되지 않은 method를 불러올 수 있는데 add 해서 추가한다.
web.xml
package com.basicWeb.www.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return null;
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return null;
}
}
먼저, 모든 경로에 대한 요청을 처리하도록 getServletMappings()에 return 값을 준다.
getServletMappings() 메서드는 DispatcherServlet이 어떤 경로에 매핑될지를 정의한다.
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] {"/"};
}
getServletMappings()를 열쇠를 만들 때 쓰는 특별한 설명서라고 비유하자면,
이 열쇠는 하나의 큰 문(/)에 잘 맞아 떨어진다고 적어둔 것(return)이다.
그러므로 모든 문(/)을 이 열쇠로 열 수 있다는 것이다.
예를 들면 /board, /member 등과 같은 모든 경로에 대한 요청을 처리할 수 있다.
/board/register의 경우 /board를 먼저 인식하고 그 후에 /register를 인식한다.
getRootConfigClasses()와 getServletConfigClasses()는 @Configuration 어노테이션을 사용하여
Spring Bean들을 정의하는 역할을 한다.
config package에서 미리 생성한 각각의 class를 return 값으로 설정한다.
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {ServletConfiguration.class};
}
애플리케이션 전체에 적용되는 빈들을 정의하는 부분은 RootConfig에서 담당하고,
웹과 관련된 빈들을 정의하고 웹 애플리케이션을 설정하는 부분은 ServletConfiguration에서 담당한다.
AbstractDispatcherServletInitializer에서 2가지를 더 Override해서 추가할건데
Alt + Shift + s를 누르고 Override / Implement Methods...를 클릭해서
AbstractDispatcherServletInitializer를 찾아,
customizeRegistration(Dynamic)과 getServletFilters()를 추가한다.
먼저, EncodingFilter를 설정하기 위해 getServletFIlters()를 작성했다.
@Override
protected Filter[] getServletFilters() {
// filter 설정
CharacterEncodingFilter encoding = new CharacterEncodingFilter();
encoding.setEncoding("UTF-8");
encoding.setForceEncoding(true); //외부로 보내는 데이터도 인코딩 설정
return new Filter[] {encoding};
}
customizeRegistration Method는 Spring이 사용하는 특정한 기능을 바꾸고 싶을 때 사용한다.
@Override
protected void customizeRegistration(Dynamic registration) {
super.customizeRegistration(registration);
}
super.customizeRegistration(registration)는 Spring에게 일을 부탁하는 것이다.
Spring에게 "일단 네가 하던대로 하고, 내가 원하는 작업을 더할게"라고 하는 부분이다.
전체적인 webConfig class는 다음과 같다.
webConfig.java
package com.basicWeb.www.config;
import javax.servlet.Filter;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {ServletConfiguration.class};
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] {"/"};
}
// EncodingFilter 설정
@Override
protected Filter[] getServletFilters() {
// filter 설정
CharacterEncodingFilter encoding = new CharacterEncodingFilter();
encoding.setEncoding("UTF-8");
encoding.setForceEncoding(true); //외부로 보내는 데이터도 인코딩 설정
return new Filter[] {encoding};
}
@Override
protected void customizeRegistration(Dynamic registration) {
// 그 외 기타 사용자 설정 (개발자가 직접 추가하는 것)
/* 사용자 지정 Exception 처리 지정
* -> 404와 같은 Exception 처리 페이지 꾸미기 -> 나중에 설정
*/
//multipartConfig 추후 설정
super.customizeRegistration(registration);
}
}
[Spring] 04. WebConfig class 설정
(다음 게시물 예고편)
[Spring] 05. ServletConfiguration class 설정
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!