프로젝트를 진행하다 보면 참으로 다양한 예외 상황을 처리해야 할 경우가 있다.
스트럿츠의 경우 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 |

