Spring Boot: Velocity 한글깨짐(Encoding) 문제

스프링부터SpringBoot를 이용한 프로젝트에서 TemplateViewEngine으로 Velocity를 선택했다.

@Bean
public ViewResolver viewResolver() {
    VelocityViewResolver viewResolver = new VelocityViewResolver();
    viewResolver.setPrefix("classpath:/templates");
    viewResolver.setSuffix(".vm");
    viewResolver.setOrder(Ordered.LOWEST_PRECEDENCE - 20);
    return viewResolver;
}

이 설정만 해서는 Velocity가 인코딩 설정을 제대로 하지 못한다.

스프링부트 설정에 application.yml을 이용했다. YAML을 설정DSL로 채택했는데, 설정이 무척 간결해진다.
Velocity와 관련된 설정은

spring:
  velocity:
    properties:
      input.encoding: UTF-8
      output.encoding: UTF-8

다음과 같이 해주면, Velocity 스프링 설정은 끝.

혹은 별도로 Velocity에 관한 설정을 하는 방법은 다음과 같다.

1. velocity.properties 를 이용하거나

<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
  <property name="configLocation" value="classpath:/velocity.properties"/>
</bean>
resource.loader = file

file.resource.loader.description = Velocity File Resource Loader
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = .
file.resource.loader.cache = false
file.resource.loader.modificationCheckInterval = 2

input.encoding=UTF-8
output.encoding=UTF-8

2. 스프링 빈 설정을 하면 된다.

스프링 빈으로 설정하는 방법은

1. JavaConfig 빈 설정

@Bean
public VelocityConfigurer velocityConfigurer() {
    VelocityConfigurer configurer = new VelocityConfigurer();
    configurer.setResourceLoaderPath("classpath:/templates");
    Properties properties = new Properties();
    properties.setProperty("input.encoding", "UTF-8");
    properties.setProperty("output.encoding", "UTF-8");
    configurer.setVelocityProperties(properties);
    return configurer;
}

2. XML 빈 설정

<bean id="velocityConfigurer" class="import org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <property name="resourceLoaderPath" value="classpath:/~~"/>
    <property name="velocityProperties">
        <props>
            <prop key="input.encoding">UTF-8</prop>
            <prop key="output.encoding">UTF-8</prop>
        </props>
    </property>
</bean>

두 가지 방법이 있다.



그냥 벨로시티를 사용하기 싫었는데...

Struts 프레임워크
 Velocity Framework 설정 : velocity.properties(종종 velocity-properties 로 하기도 한다)
 input.encoding = EUC-KR
 output.encoding = EUC-KR

'Programming' 카테고리의 다른 글

Types of software architects  (0) 2011.01.01
What dows 'PMD' mean?  (0) 2010.12.31
[Velocity] velocity.properties  (0) 2010.03.13
Velocity 설정법  (0) 2010.02.21
100207_발표내용정리  (0) 2010.02.07
나도 Java Champion 될 수 있을까?  (0) 2010.01.09

 

  • tools.xml 추가

    tools.xml.jpg

  1. <tools>
        <data type="boolean" key="xhtml" value="true"/>
        <data type="boolean" key="isSimple" value="true"/>
        <data type="number" key="version" value="2.0"/>
        <toolbox scope="request">
            <tool key="toytool" class="ToyTool" restrictTo="index*"/>
        </toolbox>
        <toolbox scope="session">
            <tool key="map" class="java.util.HashMap"/>
        </toolbox>
    </tools>

 

  • web.xml 아래 항목 추가

    web.xml.jpg

  1.    </servlet-mapping>
        <servlet>
        <servlet-name>velocity</servlet-name>
        <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
        <!-- servlet-class 위치가 1.6 버전에서는 보는 것처럼 ...view.servlet... 으로 바뀜 -->
      </servlet>
      <servlet-mapping>
        <servlet-name>velocity</servlet-name>
        <url-pattern>*.vm</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.vm</welcome-file>
      </welcome-file-list>

 

  •   index.vm

  1. <html>
    <body>
    I'm a velocity template.

    #if( $XHTML )
      #set( $br = "<br />" )
    #else
      #set( $br = "<br>" )
    #end

    $br
    $br

    Here we use a custom tool: $toytool.message

    $br
    $br

    Here we get the date from the DateTool:  $date.medium
    </body>
    </html>

index.vm.jpg

 

 

이 글은 스프링노트에서 작성되었습니다.

'Programming' 카테고리의 다른 글

What dows 'PMD' mean?  (0) 2010.12.31
[Velocity] velocity.properties  (0) 2010.03.13
Velocity 설정법  (0) 2010.02.21
100207_발표내용정리  (0) 2010.02.07
나도 Java Champion 될 수 있을까?  (0) 2010.01.09
[펌] 2010년 전략 기술 톱 10  (0) 2009.10.26

+ Recent posts