Thymeleaf 설정 후 한글 깨짐
2023-06-19
1. 문제 발생
Thyemleaf
설정 전에는 한글깨지는 현상이 없었Thymeleaf
설정 후 html
내에 있는 한글과 Controller
에서 전달하는 한글들이 깨지는 상황이 발생.
-
web.xml에 CharacterEncodingFilter 설정 문제없음.
<!-- encodingFilter --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
-
Window -> Preferences -> Web -> HTML Files -> The following encoding will apply : Encoding : UTF-8로 설정 문제없음.
-
html
내charset="UTF-8"
문제없음.<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 안녕하세요 <span th:text="'내 이름은 ' + ${name} + '입니다' "> </body> </html>
2. 문제 원인
<property name="characterEncoding" value="UTF-8" />
SpringResourceTemplateResolver
는 Thymeleaf
에서 사용하는 템플릿 파일을 찾아내기 위한 리졸버(resolver)입니다. 이 리졸버는 템플릿 파일의 위치와 확장자 등을 설정할 수 있습니다. 만약 템플릿이 UTF-8
로 작성되어 있다면 SpringResourceTemplateResolver
또한characterEncoding
을 통해 UTF-8
인코딩을 설정해야 html
내에 있는 한글이 안깨진다고 합니다.
그리고 ThymeleafViewResolver
는 뷰를 렌더링하여 클라이언트에게 전달하는 역할을 합니다. 이 뷰 리졸버는 templateEngine
빈과 연결되어 작동하며 characterEncoding
을 통해 UTF-8
인코딩을 설정하면 뷰를 클라이언트로 전송할 때 해당 인코딩이 적용되어 전달되게 됩니다.
3. 문제 해결
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
<property name="characterEncoding" value="UTF-8" />
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<property name="characterEncoding" value="UTF-8" />
</bean>
따라서, SpringResourceTemplateResolver
의 characterEncoding
속성은 템플릿 파일의 인코딩을 설정하고, ThymeleafViewResolver
의 characterEncoding
속성은 뷰의 출력 인코딩을 설정하는 것입니다. 이 두 설정을 모두 해줘야 템플릿 파일의 내용을 올바르게 읽고, 뷰를 클라이언트에게 전달할 때 한글이 깨지지 않고 제대로 표시됩니다.
댓글남기기