'프로그래밍'에 해당되는 글 3건
- 2007/08/02 SpringMVC에서 간단한 ExceptionResolver 구성하기
- 2006/12/19 JRuby로 자바 빌드하기.
- 2006/12/17 this is ABLE to painless web development.
SpringMVC에서 예외를 다루기 위해 web.xml내 명시할수 있는 예외 맵핑 방식과 비슷한 HandlerExceptionResolvers을 제공한다.
스프링 프레임워크가 맘에 드는 점중 하나가 어떤 이론이나 원칙에만 근거하여 현상을 무시하지 않고, 현실적인 부분에 대한 해결책을 제공하기 때문이 아닐까 싶다.(기타 다른 기반구조보다는.)
간단하게 HandleExceptionResolver는 컨트롤러에 발생하는 예외상황(Exception)을 처리해주는 Resolver인데, SpringMVC안에 있는 SimpleMappingExceptionResolver의 경우 Exception에 대한 view으로 forward해주는 기능을 제공한다.
-
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- Exception Resolver -->
<bean id="exceptionMapping" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="LessWnatedPointThanCurrentPointException">
auction/exceptionView/viewForCheckWantedPoint
</prop>
</props>
</property>
</bean>
</beans>
LessWnatedPointThanCurrentPointException이라는 예외가 발생하면 auction/exceptionView/viewForCheckWantedPoint이라는 이름을 가지는 View으로 포워드하게 되는데 SimpleMappingExceptionResolver을 사용하게 되면 각각 Exception마다 View을 정의해주어야 하는 불편함이 따른다.
대개의 예외 처리의 경우, 사용자에게 예외에 대한 알려주는 역활이 대부분이고, 단순하게 에러 페이지 하나로 리턴하고
각각 Exception 마다 다른 메세지만 뿌려주어도 괜찮을듯 해서 간단한 ExceptionReslovers을 만들어 보고 있다.
-
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- Exception Resolver -->
<bean id="exceptionMapping" class="...SimpleMessageExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.springframework.dao.EmptyResultDataAccessException">
alert.data.empty.result
</prop><prop key="domain.AppException">
alert.domain.app.exceptionn
</prop></props>
</property>
<property name="viewName" value="messages/alertMessage" />
</bean>
</beans>
SimpleMappingExceptionResolver 와 비슷한데 단지 exceptionMappings에 prop. 의 값이 messages.properties의 key값이 된다. viewName은 에러 페이지의 viewName이고.
- public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object obj, Exception exception) {
... - String messageCode = this.getExceptionMappings().getProperty(exceptionClassName);
ModelAndView mav = new ModelAndView(this.getViewName());
mav.addObject("messageCode",messageCode);
mav.addObject("exception",exception);
return mav; - ...
alertMessage.jsp에서는 단순히
- <spring:message code="${messageCode}" />
messages.properties에서는
-
alert.domain.app.exception=관련 작업을 진행할수 없습니다.
alert.data.empty.result=관련 데이터가 존재하지 않습니다.
여러 메세지 페이지를 만들 필요 없이 exceptionMappings에 추가하고 messages.properties에 추가하면 된다. 흠 너무 간단해서..
SimpleMappingExceptionResolvers 처럼 에외객체의 상속관계를 찾아서 근접한? 메세지 키 값을 찾는 부분을 넣어도 될듯 하고, 특정 예외의 경우 메일 발송 기능을 추가해도 될듯 하다.
메일 발송의 경우는 다른 객체로 만들어서 Order을 주는게 일반적인 방식일듯.
참고로 properties을 작성할때, http://www.resourcebundleeditor.com/wiki/ResourceBundleEditor 을 이용해서 작성하면 편하다. ant에 있는 natvie2asci 을 빼버리고 이걸로 관리하기 시작했다.
이 글은 스프링노트에서 작성되었습니다.
JRuby 1.0에서는 바이트 컴파일 기능이 추가된다니까.. 기대가 사뭇되는데...
루비를 좀 보아서는 gem이라는 패캐지 관리와 rake이라는 빌드 도구가 Python보다도 편하고 잘 작성되고,사용되는 듯 하다.. (파이썬의 패캐징은 좀 더 발전할 필요가 있을듯.. 물론 egg가 있지만..)
ant로 처음 작성할때 (물론 그냥 javac을 bash으로 돌릴때보다) 편하고 관리가 된다는 느낌이었지만.. 몇가지 태스크가 더해지면 불편하고 관리가 용이하지 않다는 점이 있다.
groovy으로 ant 대신 사용할 생각도 있었는데.. jruby가 이렇게 빨리 발전한다면.. jruby을 고려해볼만한 대상이 되지 않을까 싶다.. (요즘 그루비와 제이루비사이에서 양다리를 탄다..=ㅅ=)
Python은 .NET진영으로 Ruby은 자바진영으로 편입되는 느낌을 지울수가 없다.. :-) (난 닷넷은 모른다..T_T)
JRuby가 자바자리를 차지 하는 날이 올까? 단지 몽상이 아닐수도 있다는 생각이 요즘 든다. 컴파일되는 루비? ㅎㅎ
http://blog.foemmel.com/jrake/compiling.html
http://martinfowler.com/bliki/JRake.html
블로그바디님의 able web framework statck.
만약 당신이라면 어떤 프레임워크를 선택할 것인가? 이것이 그리 중요하지 않는 사람들도 많겠지만. 못을 박기 위해 망치를 쓰는 것 처럼 (못을 박기 위해 숟가락을 쓰는 것보다는.) (또 망치를 가진 자... 모든게 못으로만 보인다는 서양 속담도 있지만.) 어떤 도구를 쓰는가에 따라 그 작업을 하루하루를 달라질수 밖에 없다고 생각된다.
WebWork의 메인 개발자인 패트릭이 생각하는 web framework stack인데 매우 맘에 든다.
RubyOnRails의 영향으로 CoC 부분이나 자바에서 많이 쓰는 하이버네이트보다는 iBatis을 고려한 것은 현실감이 있다고 할까? ROO도 현업에서 쓰는 도구이다 보니 CoC이 과도하게 쓰게 되고...
특히 자바5의 제네럴을 이용해서 Dao을 사용하는 부분은 필요하다는 생각이 든다. 하지만 Sql디버깅 작업은 어찌 피할수 없을까?
종종 고유연 저자동,저유연 고자동 이라는 말이 생각난다. 고유연 고자동은 없는 걸까? '_'



이올린에 북마크하기
Prev
Rss Feed