2020. 9. 16. 23:14ㆍJava/Spring
Message
- Properties 파일을 Message로 등록하면 이 데이터는 JSP에서도 사용할 수 있다.
- Properties 파일을 Message로 등록하면 다국어 처리가 가능하다.
MessageSource
- MessageSource 객체를 이용해 properties 파일을 등록해주면 Message로 등록할 수 있다.
- 여기에서는 일정 시간마다 한번씩 갱신되는 ReloadableResourceBundleMessageSource를 사용한다.
Java 세팅
Java에서 Message를 사용하기 위해 ServletAppcontext에 다음 메소드를 추가한다.
//Properties 파일을 Message로 등록한다.
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
res.setBasenames("/WEB-INF/properties/data1", "/WEB-INF/properties/data2");
return res;
}
ReloadableResourceBundleMessageSource를 불러와 사용할 properties를 등록해준다.
XML 세팅
servlet-context.xml에 아래 태그를 추가한다.
<!-- 정적파일 경로 세팅 -->
<resources mapping="/**" location="/resources/"></resources>
<!-- MessageSource를 등록해준다. -->
<beans:bean class='org.springframework.context.support.ReloadableResourceBundleMessageSource' id="messagesource">
<beans:property name="basename">
<beans:list>
<beans:value>/WEB-INF/properties/data1</beans:value>
<beans:value>/WEB-INF/properties/data2</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<!-- MessageSource를 사용하기 위한 Accessor 등록 -->
<beans:bean id="messageSourceAccessor" class='org.springframework.context.support.MessageSourceAccessor'>
<beans:constructor-arg ref='messageSource'/>
</beans:bean>
ReloadableResourceBundleMessageSource에 자동주입으로 위에서 설정된 빈 객체를 사용가능하다.
@Controller
public class TestController {
@Autowired
ReloadableResourceBundleMessageSource res;
@GetMapping("/test1")
public String test1() {
String a1 = res.getMessage("aaa.a1",null,null);
String a2 = res.getMessage("bbb.b1",null,null);
System.out.println("aaa.a1"+a1);
System.out.println("bbb.b1"+a2);
return "test1";
}
}
JSP에서는 아래와 같이 데이터를 받아와 표현 가능하다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>aaa.a1: <spring:message code='aaa.a1'/></h3>
<h3>bbb.b1: <spring:message code='bbb.b1'/></h3>
</body>
</html>
data.properties의 값 중 일부만 바꿔서 사용이 가능하다. 그러기 위해서는 data.properties를 아래와 같이 {숫자}를 줌으로써 매개변수로 넘겨 줄 수 있다.
aaa.a1 = data1
aaa.a2 = 나이 {0} 이름 {1}
Controller를 아래와 같이 수정한다.
배열을 getMessage의 두 번째 인자로 넘겨주면 값이 배열의 순서대로 넘어간다.
@Controller
public class TestController {
@Autowired
ReloadableResourceBundleMessageSource res;
@GetMapping("/test1")
public String test1() {
String a1 = res.getMessage("aaa.a1",null,null);
String a2 = res.getMessage("bbb.b1",null,null);
Object [] args = {30,"쿠킹코딩"};
String a3 = res.getMessage("aaa.a2",args,null);
System.out.println("aaa.a1"+a1);
System.out.println("bbb.b1"+a2);
System.out.println("aaa.a2"+a3);
return "test1";
}
}
위와 같이 주입 된 값이 출력된다.
JSP에서의 출력은 arguments를 주어 값을 받는다.
<h3>aaa.a2: <spring:message code='aaa.a2' arguments="${args }"/></h3>
Locale
Locale을 지정하면 다국어 처리가 가능하다.
먼저 data1_ko.properties, data1_eng.properties를 아래와 같이 생성한다.
controller 메소드를 아래처럼 수정해준다.
@Controller
public class TestController {
@Autowired
ReloadableResourceBundleMessageSource res;
@GetMapping("/test1")
public String test1(Locale locale) {
String a1 = res.getMessage("aaa.a1",null,null);
String a2 = res.getMessage("bbb.b1",null,null);
Object [] args = {30,"쿠킹코딩"};
String a3 = res.getMessage("aaa.a2",args,null);
String a4 = res.getMessage("aaa.a3",null,locale);
System.out.println(locale);
System.out.println("aaa.a1"+a1);
System.out.println("bbb.b1"+a2);
System.out.println("aaa.a2"+a3);
return "test1";
}
}
String a4 = res.getMessage("aaa.a3",null,locale); 을 통해서 locale이 한글, 영어를 구분해서 언어에 맞게 파일을 선택하여 출력한다.
'Java > Spring' 카테고리의 다른 글
Spring MVC - JSR-303 어노테이션 정리 (0) | 2020.09.19 |
---|---|
Spring MVC - 유효성 검사(@Valid,JSR-303) (0) | 2020.09.17 |
Spring MVC - Properties (0) | 2020.09.15 |
Spring MVC - Cookie (0) | 2020.09.14 |
Spring MVC - ApplicationScope (0) | 2020.09.14 |