Interceptors 기능을 쓰다가 알게된 클래스인데
보통 어떤기능을 수행하기 전에 체크해야되는 것들이 있을때 Interceptors 에 preHandle 함수를 쓴다.
여기에서 만약 자기가 원치않은 정보가 왔을때 (예를 들어 로그인사용자가 아닐때)
ModelAndViewDefiningException 클래스로 exception 을 날린다.
org.springframework.web.servlet.ModelAndViewDefiningException 로서 소스는 다음과 같다.
public class ModelAndViewDefiningException extends ServletException{
public ModelAndViewDefiningException(ModelAndView modelAndView){
Assert.notNull(modelAndView, "ModelAndView must not be null in
ModelAndViewDefiningException");
this.modelAndView = modelAndView;
}
public ModelAndView getModelAndView(){
return modelAndView;
}
private ModelAndView modelAndView;
}
보는바와 같이 ServletException 을 상속받아 만든 클래스인데 그중 특이한 함수가 하나있다
getModelAndView 인데 ModelAndView 을 반환한다.
내가 사용한 소스는 다음과 같은데 이것은 어딘가로 위의 클래스를 Exception 으로 던지는
소스이다. 그럼 과연 이놈은 어디로 가는것일까?
throw new ModelAndViewDefiningException(new ModelAndView(url));
바로 DispatcherServlet 이다. 이놈한테 Exception 을 던지는것이다. 이놈을 소스를 까보면 알수있다.
catch (ModelAndViewDefiningException ex) {
logger.debug("ModelAndViewDefiningException encountered", ex);
mv = ex.getModelAndView();
}
DispatcherServlet 내부에 doDispatch 함수안에 exception 을 catch 하는부분이있다. 그럼 이놈은
에 있는 getModelAndView() 함수로 어떤 view로 갈지 ModelAndView를 리턴하게 되는데 이것은
throw new ModelAndViewDefiningException(new ModelAndView(url));
이때 new ModelAndView(url) 넘긴 정보를 받아 doDispatch 의 리턴값으로 사용하게 되고
원하는 페이지로 이동하게 된다.
'자바(JAVA)' 카테고리의 다른 글
Oracle RAC(Real Application Cluster) 구성 및 테스트 (0) | 2008.12.07 |
---|---|
간단하게 spring batch 를 만들어 스케줄 프로그램하기 (0) | 2008.11.30 |
log4j 서버 재 기동없이 load 되어 적용될수 있게 하자 (1) | 2008.11.30 |
velocity 에서 숫자로 for 문을 돌리고자 할때 (0) | 2008.11.30 |
Spring 에서 interceptors 사용하기 (0) | 2008.11.19 |
super 사용법 (0) | 2008.11.08 |
KST 표준시간를 원하는 시간포맷으로 바꾸기 (2) | 2008.10.20 |
새창으로 데이타 submit 해서 넘기기 (0) | 2008.10.11 |