Здравствуй добрый человек!
Вступление
Есть очень популярная проблема - неправильное отображкение русскоязычных символов в web-приложении. Почитал статьи - понял корень зла и камни преткновения. Осознал зачем нужны и на каких этапах передачи двнных в цепочке клиент-сервер-бд нужны эти строки на jsp страницах:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Моя же главная поблема крылась в том, что было описано в одной хорошей статье (источник: тыц)
Вот сервер, который построил админ. А это – веб-приложение, которое работает на сервере, который построил админ. А это – сервлет, который входит в веб-приложение, которое работает на сервере, который построил админ. Или JSP, которая – суть тот же сервлет. И вот получает этот сервлет запрос. А в нем данные. Какие? Набор байтов. А сервлету что нужно? Символы. Вопрос – какую кодировку использовать? Еще один экскурс в HTTP. Данные от формы при использовании метода POST передаются с указанием определенного типа содержимого: Content-type: application/x-www-form-urlencoded Теоретически, тут же может указываться и кодировка передаваемых данных: Content-type: application/x-www-form-urlencoded; charset=UTF-8 Во всяком случае, Tomcat ее пытается отсюда получить. На практике же – кодировку указывает только Opera. Может, что-то изменится в будущем, но сейчас факты таковы – кодировка пришедших данных неизвестна! И с этим надо что-то делать.Решение - использовать фильтр. Вот здесь хорошо написано и я так и сделал (источник: тыц) Вот этот кофигурирующий код вставил в web.xml
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
characterEncodingFilter
/*
Теперь всё хорошо и я в принципе счастлив, но мне хочется этот фильтр настроить через аннотации Spring, так как все остальные конфигурации я осуществляю с помощью java-классов. И как-то хочется единообразия. У меня есть 2 кофигурирующих класса: один конфигурирует приложение, другой - контекст приложения (инъекции зависимостей). Вот код первого класса.
package net.kaa.todolist.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
public class AppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(ApplicationContextConfig.class);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
Я полагаю, что в этот класс нужно вставить конфигурацию фильтра, но что-то с кодом немного в ступоре. Первый опыт общения с web-приложением, поэтому прошу помощи у более опытных оварищей. Спасибо.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ