properties는 서버가 동작하는 도중에 절대로 변하지 않는 값으로 properties파일을 만들어서 따로 관리했었다.

그러한 properties에 설정한 값들을 JSP에서 사용하려면 몇가지 설정이 필요하다.

properties파일을 message에 등록하게 되면 이 데이터를 JSP에서도 사용할 수 있으며 다국어 처리도 할 수 있도록 지원한다.

 

 

 

MessageSource

 

MessageSource객체를 이용해서 properties 파일을 등록해주면 Message로 등록할 수 있다.

이 때, 일정 시간마다 한번씩 갱신되는 ReloadableResourceBundleMessageSource를 이용한다. 원래 properties로 지정하면 서버가 가동되는 동안에는 절대로 값을 변경할 수 없는데 ReloadableResourceBundleMessageSource를 이용하면 서버를 중지하지 않더라도 properties를 변경하면 갱신되서 사용가능하게 한다.

message를 등록하는 방법은 Spring설정파일을 Java에서 등록한 프로젝트와 xml파일에서 등록한 프로젝트의 방법이 약간 다르다. 사용하는 방법은 똑같으니 설정하는 것만 알아보도록 하자.

 

 

 

 

1. Java설정파일

 

 

ReloadableResourceBundleMessageSource형 메소드를 빈으로 등록을 해주어야 한다. (ServletAppContext.java에!)

properties를 한개반 등록한다면 setBasename을 사용하고 여러개라면 setBasenames를 사용해준다. 그리고 주의할 점은 properties의 경로를 적을 때 확장자명은 생략해서 적어주어야 한다.

 

 

 

2. xml설정파일

 

 

xml 설정파일(servlet-context.xml)에 등록하는 방법은 다음과 같다. 

ReloadableResourceBundleMessageSource를 클래스로 등록해주고, 프로퍼티의 이름을 basename으로 등록해서 value에 경로를 넣어준다. 여러개라면 프로퍼티의 이름을 basenames로 등록해주고 안에 list형식으로 value를 등록해주면 된다. 경로를 지정할 때 역시 확장자명을 빼고 써주어야 한다.

Java와 다른점은 xml은 등록한 메세지 소스 객체를 통해서 properties파일에 접근할 수 있는 MessageAccessor를 지정해주어야 한다. MessageSourceAccessor 클래스의 빈을 등록해주고 그 빈의 생성자에 위에서 만든 messageSource빈을 주입해주면 된다.

 

 

 

 

3. Controller에서 사용하는 방법

 

 

1번과 2번처럼 작업을 해주면 properties가 message로 등록이 된 것이다. 이 message를 사용하기 위해서 ReloadableResourceBundleMessageSource를 주입받아서 사용한다. 이때 Locale을 받으면 다국어 처리가 가능하다.

 

위와 같이 getMessage("aaa.a1", null, null) 하여 properties파일에 aaa.a1이라는 이름의 변수의 값을 가져온다. 

매개변수를 총 3개 받는데 아래서 한개씩 설명하도록 하겠다. 

첫번째 매개변수는 변수의 이름과 맞는 값을 받아올 때 사용한다. 

 

 

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<body>
   <h1> result </h1>
   <h3> aaa.a1 : <spring:message code="aaa.a1" /> </h3>
   <h3> ccc.c1 : <spring:message code="ccc.c1" /> </h3>
</body>

 

 

JSP(View)에서 taglib를 선언하여 Form커스텀 태그를 이용하여 message를 사용할 수 있다. 

<spring:message>태그code라는 설정을 message에 등록된 properties의 변수이름으로 선언해주면 해당 변수의 값을 출력하는 결과를 얻을 수 있다.

 

 

 

 

 

 

이번엔 getMessage의 두번째 매개변수의 활용이다.

properties파일에서 위와 같이 'aaa.a3 = 나이는 {0}이고 이름은 {1}입니다.' 방식으로 {0}, {1}과 같이 선언해주었다.

properties파일은 서버가 동작하는 도중에 절대 바뀔 수 없는 값이다. 하지만 두번째 매개변수를 이용해서 해당 변수에 값을 넣어줄 수 있다. 문자열 배열을 선언하고 그 배열을 두번째 매개변수에 넣어준다.

이렇게 하면 message에 등록된 properties파일의 변수에 값을 넣어줄 수 있다. JSP(View단)에서 사용하려면 Model을 이용해서 Request로 넘겨주어야 한다!

 

 

<body>
   <h1> result </h1>
   <h3> aaa.a1 : <spring:message code="aaa.a1" /> </h3>
   <h3> ccc.c1 : <spring:message code="ccc.c1" /> </h3>
   <h3> ccc.c1 : <spring:message code="aaa.a3" arguments="${args}"/> </h3>
</body>

 

 

 

Form커스텀 태그에서 사용할 때에는 다음과 같이 arguments라는 속성에 Request영역으로 넘겨주었던 문자열 배열의 값을 넣어주면 된다. 

 

 

 

 

 

 

 

 

3번째 매개변수의 활용이다. 이 매개변수는 다국어 처리를 위한 것이다. 사용하고자 하는 메소드에 Locale클래스를 매개변수로 받고 그 변수를 세번째 매개변수에 넣으면 실행중인 웹 브라우저의 언어를 기반으로 값을 지정하여 출력해준다.

아무것도 설정하지 않고 출력하면 한국어라는 의미로 ko라고 출력이 된다. 

 

 

웹 브라우저의 (필자는 크롬에서 설정) 언어를 영어로 바꾸어 보았다. 

 

 

다음과 같이 en_US라고 나오는것을 볼 수 있었다. 이를 활용해서 원하는 값을 다국어 처리를 할 수 있다. 

 

data1_ko.properties
data1_en.properties

 

data1_ko.properties, data1_en.properties 라는 이름으로 properties파일을 두개 만들었다. 각각의 프로퍼티파일에는 같은 이름의 변수 lang.a1이 선언되어있지만 값은 각각 한국어, english로 상이하다.

이렇게 하면 한국어인경우 ko파일을, 영어인경우 en파일을 자동으로 찾아주게 된다.

'JAVA > Spring MVC' 카테고리의 다른 글

에러메세지 커스터마이징  (2) 2020.04.30
Spring MVC 유효성검사  (0) 2020.04.30
Properties  (0) 2020.04.28
SpringMVC에서 Cookie 사용하기  (0) 2020.04.28
Spring MVC에서의 빈 관리 (ApplicationScope)  (0) 2020.04.28

+ Recent posts