많이 사용되는 예외 처리 기법 중 ExceptionResolver 의 일종인 SimpleMappingExceptionResolver 를 사용하여 Exception 종류 별로 특정 페이지로 이동 할 수 있게 하는 방법 이 있다.



Controller 의 기능만 사용해서 개발 한다면 Spring MVC 의 범위 안에서 Exception 을 해결 할 수 있기 때문에 크게 문제가 되지 않는다. 실제 개발 하는 부분은 Execute Business Logic 가 전부 이기 때문 이다.


회사에서 Spring MVC 라이브러리를 바탕으로 하여 만들어 지는 프레임워크는 Handler Mapping, Handler Adapter, View Resolver 의 확장이 대부분 이며, 예외 처리는 직접 고려해야 한다.


Business Logic 을 처리 하고 난 후 사용자에게 제공 되는 화면이 요구사항에 따라 달라질 수 있고, 잦을 수도 있다. 이에 대응 하기 위해서 View 를 확장 한다.


  1. AbstractExcelView 를 사용하여 Excel 연동 하기 (http://blog.whitelife.co.kr/197)
  2. AbstractView 사용하여 Ajax 처리 하기 (http://blog.whitelife.co.kr/208)
  3. AbstractView 사용하여 파일 다운로드 처리 하기 (http://blog.whitelife.co.kr/211)

AbstractView 를 사용해서 작업한 내용의 글 이다. 필요한 경우 참고 하자.


View 를 확장 했기 때문에 ExceptionResolver 가 예외 처리를 할 수 없다. 시점 이 그 이후 이기 때문 이다. 추가 적인 예외 처리가 필요 한대 WAS(Web Application Server) 에서 제공 하는 기능을 사용 해야 한다.


실제 서비스 중에 알파벳이 난무 하는 화면이 보여진 다면, 문제가 심각할 것 이다. 디버깅을 해서 보완을 하더라도, 그 시간동안은 대체 하는 화면이 필요 하다.


<error-page>
    <error-code>400</error-code>
    <location>/WEB-INF/view/error/badrequest.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/view/error/notfound.jsp</location>
</error-page>
<error-page>
    <error-code>414</error-code>
    <location>/WEB-INF/view/error/requesturitoolong.jsp</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/view/error/internalservererror.jsp</location>
</error-page>


web.xml 에 추가 하자. 보통 /WEB-INF/web.xml 에 파일이 있다.


error-page

description
400 (잘못된 요청): 서버가 요청의 구문을 인식하지 못했다.
404 (찾을 수 없음): 서버가 요청한 페이지를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다.
414 (요청 URI가 너무 긺): 요청 URI(일반적으로 URL)가 너무 길어 서버가 처리할 수 없다.
500 (내부 서버 오류): 서버에 오류가 발생하여 요청을 수행할 수 없다.


Http Status Code 에 따라 보여질 화면을 설정 한다.


강제로 에러를 발생해서 확인 해 보면 의도하는 화면이 표현 될 것 이다.


요구사항에 대한 기능은 정상적으로 동작 하기 때문에, 별거 아니라고 생각하고 지나칠 수 있다. 신경 써서 마무리 한다면 완성도 가 높은 프로젝트를 경험 할 수 있을 것 이다.


참고 사이트


Java Web Application 은 /webapps 하위 에 있는 /WEB-INF 는 직접 적으로 접근이 불가능 하기 때문에 Servlet 을 통과하게 되어 있다. 단순하게 페이지만 보여주는 용도라면 모든 case by case 를 Controller 에 작성 하는 것은 불편 하기 때문에 view-controller 를 사용하면 편리하게 개발이 가능 하다.


dispatcher-servlet 를 설정 하는 xml 에 추가를 하자.


<mvc:view-controller path="/" view-name="/sample"/>


path, view-name 을 인자로 받는다. path 는 @RequestMapping 에서 사용 했던 value 값 이고, view-name 은 ModelAndView 에 setViewName(String viewName) 이라고 보면 된다.


<mvc:view-controller path="/" view-name="redirect:sample/"/>


redirection 하는 경우에는 view-name 의 앞에 redirect: 를 작성 하자.


+ Recent posts