JavaRush /Java блог /Random UA /Кодування запиту у Spring з використанням CharacterEncodi...
Core
35 рівень
Екатеринбург

Кодування запиту у Spring з використанням CharacterEncodingFilter

Стаття з групи Random UA
Доброго дня добра людина! Є дуже популярна проблема – неправильне відображення російськомовних символів у 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. Може, щось зміниться в майбутньому, але зараз факти такі – кодування даних невідоме! І із цим треба щось робити.
Рішення – використовувати фільтр. Ось тут добре написано і я так і зробив . допомогою java-класів. І якось хочеться одноманітності. У мене є 2 кофігуруючі класи: один конфігурує програму, інший - контекст програми (ін'єкції залежностей). Ось код першого класу. Я вважаю, що в цей клас потрібно вставити конфігурацію фільтра, але щось із кодом трохи в ступорі. Перший досвід спілкування з web-додатком, тому прошу допомоги у досвідченіших оварищев. Дякую. characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true characterEncodingFilter /* 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("/"); } }
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ