2009. 4. 15. 09:06

Spring Exception handle


프로젝트를 진행하다 보면 참으로 다양한 예외 상황을 처리해야 할 경우가 있다.
스트럿츠의 경우 glabal Exception을 관리하게끔 되어 있고, 그러한 처리를 springframework에서는 exceptionResolver를 이용해서 해결 할 수 있다 하겠다.

기본적인 XXX-servlet.xml파일의 설정을 보면
<bean id="exceptionResolver"
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="org.springframework.dao.DataAccessException">       
                    dataAccessFailure
                </prop>
                <prop key="defaultErrorView">error</prop>
            </props>
        </property>
    </bean>
와 같은 설정환경을 볼 수 있다.
위에는 기본적인 리졸버를 이용해서 DataAccessException이 발생하면 아마도 jsp를 뷰페이지로 사용하는 측에서는dataAccessFailure.jsp를 보여주고 나머지 다른 예외가 발생하면 error.jsp를 보여줄 것이다.

하지만 이때 에러발생 메세지나 간단한 메세지만 보내줄 수 있지 현재 에러가 발생한 객체내의 어떤 특정 값이나 에러 메세지를 유연하게 가공하려면 그리 순탄치만은 않다.

그래서 springframework의 SimpleMappingExceptionResolver객체를 상속받아 doResolveException을 조작하면 현재 컨텍스트 상에서 request객체를 끌어내어 활용할 수 있다.

하지만 이또한 귀찮다. 물론 기존 SimpleMappingExceptionResolver의 다양한 기능들을 쓰지는 못하지만 이곳의요구사항은 좀 단순한 편이어서 아에 스프링 프레임 워크의 HandlerExceptionResolver 인터페이스를 구현해서사용해 버렸다.

public class DefaultExceptionProcess implements HandlerExceptionResolver  {
 protected final Log log = LogFactory.getLog(this.getClass());
 
 private String view = null;
 public void setView(String view) {
  this.view = view;
 }
 
 public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object obj,Exception exception) {
      //여기에 뭔가 저지레를 떨 수 있다. ㅡㅡ;
    request.setAttribute("exception",msg);
    return new ModelAndView(view);
 }
}

위 클래스를 생성한 다음.

<bean id="exceptionResolver" class="DefaultExceptionProcess">
  <property name="view" value="error"/>
 </bean>

XXX-servlet.xml에 기존 exceptionResolver에 사용되던 SimpleMappingExceptionResolver를 치우고 새로 만든 exceptionReslover로 대체한다.

우린 여기에 현재 에러가 발생한 Controller상의 request자원의 어떤 특정값이 에러를 표현하는데 필요하여 사용하였고 이외에 다양한 방식의 예외 처리에도 좋을 듯 싶다.


'프로그래밍 > java' 카테고리의 다른 글

반송되는 메일의 에러 유형 정리  (0) 2009.05.12
자바 날짜 포맷 Java  (0) 2009.04.15
자바 날짜 가져오기..  (0) 2009.02.18
[ "==" 과 "equals()" 의 차이점]  (0) 2008.12.09
자바 정규식  (0) 2008.08.27