-
Spring MVC - MessageSpring/Spring MVC 2022. 1. 2. 23:44728x90반응형
Message
- properties 파일을 Message로 등록하면 properties 파일 안에 저장된 데이터를 서버뿐만 아니라
JSP에서도 사용할 수 있다. - Properties 파일을 Message로 등록하면 다국어 처리가 가능해진다.
MessageSource
- MessageSource 객체를 이용해 properties 파일을 Message로 등록할 수 있다.
사용할 properties 파일 생성
▼ data1.properties (/WEB-INF/properties/)
aaa.a1 = 문자열1 aaa.a2 = 나이는 {0}이고 이름은 {1}입니다
▼ data2.properties (/WEB-INF/properties/)
bbb.b1 = 문자열2
방법 1 - Java
ServletAppContext.java 에 Message 등록
propertie 파일을 Message로 등록해 Controller와 JSP에서 사용해보자.
▼ ServletAppContext.java
// Spring MVC 프로젝트에 관련된 설정을 하는 클래스 @Configuration // Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다. @EnableWebMvc // 스캔할 패키지를 지정한다. @ComponentScan("kr.co.controller") public class ServletAppContext implements WebMvcConfigurer{ // Controller의 메서드가 반환하는 jsp의 이름 앞뒤에 경로와 확장자를 붙혀주도록 설정한다. @Override public void configureViewResolvers(ViewResolverRegistry registry) { ... } // 정적 파일의 경로를 매핑한다. @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { ... } //properties 파일을 message로 등록한다. @Bean public ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource(); res.setBasenames("/WEB-INF/properties/data1","/WEB-INF/properties/data2"); return res; } }
@Bean
- Bean 등록을 해줘야 한다. (Bean 등록 안 해서 한참 헤맸다..)
ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
- messageSource 객체를 이용해 properties 파일을 등록해주면 Message로 사용할 수 있다.
- 일정 시간마다 한 번씩 갱신되는 ReloadableResourceBundleMessageSource를 사용하였다.
properties 파일 등록
1. 1개 등록 - res.setBasename("/WEB-INF/properties/data1");
2. 2개 이상 등록 - res.setBasenames("/WEB-INF/properties/data1","/WEB-INF/properties/data2");
- res.setBasenames 메서드는 매개 변수를 가변 인자로 받는다.
MessageSource를 Controller에서 주입받아 Message 사용
등록한 Message를 Controller에서 사용
▼ Controller
@Controller public class testController { // MessageSource를 주입받는다 @Autowired ReloadableResourceBundleMessageSource res; @GetMapping("/test1") public String test1(Model model, Locale locale){ System.out.println("locale = " + locale); // Message에서 { } 가 없는 일반 데이터 가져오기 String a1 = res.getMessage("aaa.a1", null, null); String b1 = res.getMessage("bbb.b1", null, null); System.out.println(a1); System.out.println(b1); // Message에에 { } 부분에 셋팅할 배열 Object [] args = {30, "홍길동"}; // Message에서 { } 가 있는 데이터 가져오기 String a2 = res.getMessage("aaa.a2", args, null); System.out.println(a2); model.addAttribute("args", args); // 다국어 처리 String a3 = res.getMessage("aaa.a3", null, locale); System.out.println(a3); return "test1"; } }
@Autowired
ReloadableResourceBundleMessageSource res;
- MessageSource를 주입받는다.
public String test1(Model model, Locale locale){
- '나이는 {0}이고 이름은 {1}입니다'의 데이터를 JSP에서 사용하기 위해 {0}, {1}에 들어갈
값을 Model 객체에 저장하기 위해 Model을 주입 받음.
- Locale은 브라우저에 설정되어있는 언어 값을 알려준다
Object [] args = {30, "홍길동"};
String a2 = res.getMessage("aaa.a2", args, null);
- 저장되어있는 데이터를 가져온다.
- getMessage(property의 key, 메시지 출력 시 전달 인자, Locale)
String a3 = res.getMessage("aaa.a3", null, locale);
- 브라우저의 언어 값을 가져와서 각 언어에 따른 properties를 선택하여 데이터 값을 가져온다.
- ex) data1_en.properties, data1_ko.properties, data1_ja.properties
- 해당 언어가 없을 시 data1.properties에 저장된 데이터를 가져온다.
- data1.properties를 Message로 등록했으면 나머지 언어 properties는 등록 안 해줘도 된다.JSP에서 Message 사용
이제 등록한 Message를 JSP에서 사용해보자.
▼ 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> <h1>test1</h1> <h3>aaa.a1 = <spring:message code='aaa.a1'></spring:message></h3> <h3>bbb.b1 = <spring:message code='bbb.b1'></spring:message></h3> <h3>aaa.a2 = <spring:message code='aaa.a2' arguments="${args }"></spring:message></h3> </body> </html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
- Message를 사용하기 위해 태그 라이브러리를 가져와야 한다.
<h3>aaa.a1 = <spring:message code='aaa.a1'></spring:message></h3>
<h3>bbb.b1 = <spring:message code='bbb.b1'></spring:message></h3>
<h3>aaa.a2 = <spring:message code='aaa.a2' arguments="${args }"></spring:message></h3>
- Message에 저장된 데이터 사용
방법 2 - XML
servlet_context.xml 에 Message 등록
propertie 파일을 Message로 등록해 Controller와 JSP에서 사용해보자.
▼ servlet_context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/mvc" ..... > <!-- 스캔한 패지키 내부의 클래스 중 Controller 어노테이션을 가지고 있는 클래스들을 Controller로 로딩하도록 한다 --> <annotation-driven/> <!-- 스캔할 bean들이 모여있는 패키지를 지정한다. --> <context:component-scan base-package="kr.co.softcampus.controller"/> <!-- Controller의 메서드에서 반환하는 문자열 앞 뒤에 붙힐 경로 정보를 셋팅한다. --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> ... </beans:bean> <!-- 정적파일(이미지, 사운드, 동영상, JS, CSS 등등) 경로 셋팅 --> <resources mapping="/**" location="/resources/"/> <!-- MessageSource를 등록한다. --> <beans:bean class='org.springframework.context.support.ReloadableResourceBundleMessageSource' id='messageSource'> <beans:property name="basenames"> <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> </beans:beans>
<beans:bean class='org.springframework.context.support.ReloadableResourceBundleMessageSource' id='messageSource'>
- MessageSource를 등록
- id 값을 준 이유는 Message Accessor를 등록해주기 위해서이다.
propertie 등록
1. 1개만 등록
<beans:property name='basename' value='/WEB-INF/properties/data1'></beans:property>
2. 1개 이상 등록
<beans:property name="basenames">
<beans:list>
<beans:value>/WEB-INF/properties/data1</beans:value>
<beans:value>/WEB-INF/properties/data2</beans:value>
</beans:list>
</beans:property>
<beans:bean id='messageSourceAccessor' class='org.springframework.context.support.MessageSourceAccessor'>
<beans:constructor-arg ref='messageSource'/>
</beans:bean>
- MessageSource를 사용하기 위한 Accessor 등록
- 이 설정을 안 해주면 properties에 접근을 못한다.Contoller와 JSP에서 사용 방법은 위 Java방식과 같으므로 생략하겠다.
728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 에러 메시지 커스터마이징, From 데이터 유지하기 (0) 2022.01.03 Spring MVC - 유효성 검사 (JSR-303) (0) 2022.01.03 Spring MVC - Properties (0) 2021.12.30 Spring MVC - Cookie (0) 2021.12.30 Spring MVC - ApplicationScope 빈 주입 (0) 2021.12.30 - properties 파일을 Message로 등록하면 properties 파일 안에 저장된 데이터를 서버뿐만 아니라