Java + Spring MVC + Tomcat + Velocity + MySql и как все это дело подружить с русским языком

23 ноября, 2011 | Автор: Lex

Столкнулся я тут как-то с проблемой, чтобы мой проект поддерживал русский язык. Дело то вроде и не хитрое казалось бы, но надо учесть все подводные камни.

Теорию пожалуй опущу, по этому поводу есть отличная статья, которая мне очень помогла в решении проблемы.

Итак, есть у нас некий проект, использующий все вышеупомянутые технологии. Как же все-таки подружить его с русским языком.

Начнем с того, что в первую очередь переведем нашу базу MySQL в кодировку UTF-8, и проверим что-бы все таблицы были в этой кодировке.

Есть такое дело. Далее переводим собственно сами web-файлы в кодировку UTF-8. В данном случае в eclipse (Window -> Preferences)

Дальше прописываем конфиги для request'ов и respons'ов для velocity в Dispatcher-сервлете спринга

<bean id="velocityConfig"
	class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
	<property name="resourceLoaderPath">
		<value>/</value>
	</property>
	<property name="velocityProperties">
		<props>
			<prop key="input.encoding">UTF-8</prop>
			<prop key="output.encoding">UTF-8</prop>
		</props>
	</property>
</bean>
 
<bean id="viewResolver"
	class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
	<property name="prefix">
		<value>/WEB-INF/velocity/</value>
	</property>
	<property name="suffix">
		<value>.vm</value>
	</property>
	<property name="contentType" value="text/html; charset=UTF-8"/>
	<property name="dateToolAttribute"><value>dateTool</value></property>
</bean>

  И последний штрих - надо написать фильтр и подключить его в web.ini

package com.ellexdev.sunbay;
 
import java.io.*;
import javax.servlet.*;
 
/**
 * FormEncodingSetterFilter
 *
 * @author Eugene Matyushkin
 */
public class FormEncodingSetterFilter implements Filter{
 
    private static final String FILTERABLE_CONTENT_TYPE=
        "application/x-www-form-urlencoded"
;   private static final String ENCODING_DEFAULT = "UTF-8";   private static final String ENCODING_INIT_PARAM_NAME = "encoding";   private String encoding;   public void destroy(){ }   public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException{ String contentType = req.getContentType(); if (contentType != null && contentType.startsWith(FILTERABLE_CONTENT_TYPE)) req.setCharacterEncoding(encoding); chain.doFilter(req, resp); }   public void init(FilterConfig config) throws ServletException{ encoding = config.getInitParameter(ENCODING_INIT_PARAM_NAME); if (encoding == null) encoding = ENCODING_DEFAULT; } }

<filter>
	<filter-name>FormEncodingSetterFilter</filter-name>
	<filter-class>com.ellexdev.sunbay.FormEncodingSetterFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>FormEncodingSetterFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

и вуаля... наши байты превращаются... байты превращаются... превращаются байты... в необходимые нам русские символы!


Понравилась статья? Жми



 Комментарии:

 
1. Дмитрий :
12 марта, 2012 | 12:24


Большое спасибо. Очень помогло
 
Написать комментарий:

Текст сообщения     

Ваше имя (обязательно)     

Ваша почта (скрыто) (обязательно)     

Если комментарии содержат ссылки они проходят модерацию...
Карта сайта
Карта сайта
Игры:

squares
Игра Squares
Прямые ссылки скачать последние версии Adobe Flash, Кодеки, Google Chrome и другие популярные программы  
Календарь для печати на А4:
calendar.ellexdev.com
Внешний вид календаря

Особенность этого календаря: недели отображаются вертикально, а не горизонтально.
 
Компьютерная графика и вычислительная геометрия: