Please Enable JavaScript!
Gon[ Enable JavaScript ]

ModelAndViewDefiningException 클래스의 용도

자바(JAVA)
반응형


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 의 리턴값으로 사용하게 되고
원하는 페이지로 이동하게 된다.
반응형
Posted by 녹두장군1
,