JavaRush /Java блог /Архив info.javarush /Кодировка запроса в Spring с использованием CharacterEnco...
Core
35 уровень
Екатеринбург

Кодировка запроса в Spring с использованием CharacterEncodingFilter

Статья из группы Архив info.javarush
Здравствуй добрый человек! Вступление Есть очень популярная проблема - неправильное отображкение русскоязычных символов в 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-приложением, поэтому прошу помощи у более опытных оварищей. Спасибо.
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ