자바 설정으로 한번 시험을 해보았다. throwExceptionIfNoHandlerFound 이 먹는지에 대하여서 그렇다.
public class WebXmlConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {WebMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override//web.xml 설정 변경 메서드
protected void customizeRegistration(Dynamic registration) {
//InitParam 추가
registration.setInitParameter("throwExceptionIfNoHandlerFound", "true");
}
}
AbstractAnnotationConfigDispatcherInitializer 상속 클래스는 web.xml을 대신한다는 것을 기억한다.
여기서 재정의한 메서드 중 cutomizeRegistration 메서드는 디스페쳐 서블릿 설정 객체를 매개 값으로 갖는데,
setInitParameter(키, 값) 메서드로 키와 값을 web.xml 에 주던대로 주면 되겠다.
@ControllerAdvice에서 익셉션을 잘 캐치하는 것을 확인했다.
@ControllerAdvice
@Log4j
public class CommonExceptionAdvice {
@ExceptionHandler(NoHandlerFoundException.class)
public String hadle404(NoHandlerFoundException ex, Model model) {
log.error("Exception : "+ex.getMessage());
return "exception/handle404";
}
}
DefaultServletHandler 설정을 @EnableWebMvc 가 사용하는 WebMvcConfigurer 구현객체 에서 configureDefaultServletHandling 메서드를 재정의 하여 실험을 해보기로 했다. 정말 WAS 의 DefaultServlet 문제인가, 싶어서..
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.soomin.controller","com.soomin.exception"})
public class WebMvcConfig implements WebMvcConfigurer{
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
...
}
역시나 catch 되던 NoHandlerFoundException이 잡히지 않기 시작한다. ..이유는 확실히 알아서 답답한 마음이 가신다..😂😂
'springframework' 카테고리의 다른 글
Hikari CP (DBCP) ....DataSource 설정 (0) | 2020.08.10 |
---|---|
DefaultHandler 와 우선순위. (0) | 2020.08.09 |
WAS 가 던지는 에러페이지 핸들링. (0) | 2020.08.09 |
Spring Legacy Project 서블릿 스펙 3.1로 업그레이드. (0) | 2020.08.09 |
@Log4j 에노테이션 적용이 안될때... (0) | 2020.08.02 |