Spring MVC - 에러 처리 전략

2010. 9. 11. 20:55plming/Java - Spring

Controller 내에서 발생하는 에러를 정교하게 처리하기 위해 ExceptionResolver를 이용할 수 있다.

 action-servlet.xml - ExceptionResolver를 설정하는 부분

 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <property name="exceptionMappings">
         <props>
             <prop key="net.javajigi.user.ExistedUserException">defaultErrorMessage</prop>
             <prop key="net.javajigi.user.UserNotFoundException">defaultErrorMessage</prop>
         </props>
     </property>
     <property name="exceptionAttribute" value="sampleException" />
     <property name="defaultErrorView" value="error" />
 </bean>

Controller 내에서 net.javajigi.user.ExistedUserException 이 발생할 경우 "sampleException" 이름으로 "WEB-INF/jsp/defaultErrorMessage.jsp" 파일에 에러 메시지를 출력하게 된다.  "exceptionAttribute" 속성을 사용하지 않았을 때의 디폴트 값은 "exception" 이다.  "defaultErrorView" 속성은 앞의 "exceptionMappings" 에 정의된 Exception 외의 다른 에러가 발생할 경우 "/WEB-INF/jsp/error.jsp" 에 에러 메시지를 출력(에러 안내문장이 정해진)하도록 설정한 것이다.

 defaultErrorMessage.jsp

 <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
 <%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>

 <p><span class="fieldError"><c:out value="${sampleException.message}"/></span></p>



입력화면의 입력 값들을 유지한 상태로 에러 메시지를 출력하기 위해서는 Controller에서 Exception을 직접 처리해야 한다.

 import org.springframework.validation.BindException;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.SimpleFormController;

 public class UserFormController extends SimpleFormController {

     public ModelAndView onSubmit(HttpServletRequest request,
             HttpServletResponse response, Object command, BindException errors)
             throws Exception {

             try {
                 userService.addUser(user);
             } catch (ExistedUserException e) {
                 ModelAndView mav = new ModelAndView(getFormView());
                 mav.addObject("user", user);
                 mav.addObject("existedUserException", e);

                 return mav;
             }


 - 에러 메시지를 출력하는 JSP

 <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
 <%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
 <%@ taglib uri="http://www.springmodules.org/tags/commons-validator" prefix="v"%>
 <%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
 
 <c:if test="${not empty existedUserException }">
 <br/>
 <p><b><fmt:message key="error.message"/></b> :
 <span class="fieldError"><c:out value="${existedUserException.message}"/></span>
 </p>
 </c:if>


[출처] Spring 프레임워크 워크북

'plming > Java - Spring' 카테고리의 다른 글

Excel Upload  (1) 2010.12.20
ORM (Object Relation Mapping)  (0) 2010.09.12
Spring MVC - 다국어 지원  (0) 2010.09.05
Spring MVC - 파일 업로드  (0) 2010.09.03
Spring MVC - 기타 Controller  (0) 2010.09.02