웹어플리케이션이 구동중에 MessageSource가 변경되는 경우 ReloadableResourceBundleMessageSource를 이용하면 ResourceBundleMessageSource와 달리
재시작을 하지 않아도 된다. 하지만 이 방법은 개발시에는 유용하지만 실제 운영 서버에서는 다른 기타 문제가 발생할 수 있기 때문에 
비추하는 방법이라 한다.뿐만 아니라 ReloadableResourceBundleMessageSource에서 사용하는 MessageSource 파일은 classpath안에 
두지 않아야 한다. 그 이유는 애플리케이션 서버는 클래스패스에 있는 모든 리소스를 캐싱하기 때문이라 한다. 그렇기 때문에

<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/message/message-sample</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds">
<value>60</value>
</property>
</bean>

위처럼 정의한다면, 로케일을 기반으로 messages_<LID>.properties 와 errors_<LID>.properties 를 찾게 된다.
단 classpath 대신 WEB-INF/message/message-sample 과 같은 위치에 두는 것이 좋다


MessageSource의 사용은

예를 들어 message-sample_en_US.properties가

message = hi my name is {0} 

형태로 되어있다고 했을때

@Inject
MessageSource messagesource

messageSource.getMessage("message", new String[] {"stewie"}, "no surch", Locale.US);

같은 메서드의 결과가 hi my name is stewie 와 같이 나온다고 한다.

http://www.javajigi.net/pages/viewpage.action?pageId=207061054
http://jjaeko.tistory.com/18

신고
Posted by Stewie
TAG Spring

SimpleMappingExceptionResolver는 HandlerExceptionResolver의 구현체로서 예외가 발생하였을때
그 종류에 따라 에러 페이지를 표시한다던지, 혹은 다른 Controller를 호출하여 후속 작업을
가능하도록 하게 하여 준다. 단, view layer에서 발생하는 예외는 이름 그대로 HandlerException
Resolver이기 때문에 처리 할 수 없다.

<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="EXCEPTION 종류 class">view/error</prop>
</props>
</property>
</bean>

만약, 해당 에러 페이지로 이동하기 전 log를 남기고 싶다면 warnLogCategory property를 이용하여
남길 수 있다. 

<property name="warnLogCategory" value="abcd"/>



또 다른 방법으로는,
@Controller 가 명시된 Controller에서 @ExceptionHandler(Exception.class)을 표시한 메서드를 구현하면
실질적으로 그 컨트롤러 안에 예외가 발생하였을 경우 해당 메서드가 실행되게 된다.

    @ExceptionHandler(Exception.class)
    public void testException(Exception ex) {
        // ...
    }
    
뿐만 아니라 @ResponseStatus 태그도 같이 사용할 수 있어 Response Status Code를 전달할 수도 있다.

    @ExceptionHandler(Exception.class)
    @ResponseStatus(value=HttpStatus.NOT_FOUND)
    public void testException(Exception ex) {
        // ...
신고

'09.Framework' 카테고리의 다른 글

JUnit4 테스트 Datasource Rollback  (0) 2011.12.06
Spring Framework / ReloadableResourceBundleMessageSource  (0) 2011.08.16
Spring MVC SimpleMappingExceptionResolver  (0) 2011.08.16
Spring 3.0 에서 Quartz 설정  (0) 2011.08.09
iBatis 동적 SQL 작성  (0) 2009.10.25
WebWork in Action  (0) 2009.10.07
Posted by Stewie
TAG Spring


티스토리 툴바