JavaRush /Blogue Java /Random-PT /Solicitar codificação no Spring usando CharacterEncodingF...
Core
Nível 35
Екатеринбург

Solicitar codificação no Spring usando CharacterEncodingFilter

Publicado no grupo Random-PT
Olá, bom homem! Introdução Existe um problema muito comum - exibição incorreta de caracteres do idioma russo em um aplicativo da web. Li os artigos e compreendi a raiz do mal e os obstáculos. Percebi por que essas linhas são necessárias nas páginas jsp e em quais estágios da transferência de dados na cadeia cliente-servidor -banco de dados : <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Meu principal problema está no que foi descrito em um bom artigo (fonte: Tyts )
Aqui está o servidor que o administrador construiu. E esta é uma aplicação web que roda em um servidor construído pelo administrador. E este é um servlet que faz parte de um aplicativo da web executado em um servidor criado pelo administrador. Ou JSP, que é o mesmo servlet. E este servlet recebe uma solicitação. E contém dados. Qual? Um conjunto de bytes. O que um servlet precisa? Símbolos. Pergunta: que codificação devo usar? Outra excursão ao HTTP. Os dados do formulário ao usar o método POST são transmitidos indicando um tipo de conteúdo específico: Content-type: application/x-www-form-urlencoded Teoricamente, a codificação dos dados transmitidos também pode ser especificada aqui: Content-type: application/ x-www-form-urlencoded; charset=UTF-8 De qualquer forma, o Tomcat está tentando obtê-lo daqui. Na prática, apenas o Opera especifica a codificação. Talvez algo mude no futuro, mas por enquanto os fatos são os seguintes: a codificação dos dados recebidos é desconhecida! E algo precisa ser feito sobre isso.
A solução é usar um filtro. Está bem escrito aqui e foi o que fiz (fonte: tyts ) inseri esse código de configuração no web.xml Agora está tudo bem e estou basicamente feliz, mas quero configurar esse filtro através das anotações do Spring , já que realizo todas outras configurações com o uso de classes java. E de alguma forma eu quero uniformidade. Tenho 2 classes de configuração: uma configura a aplicação, a outra configura o contexto da aplicação (injeção de dependência). Aqui está o código da primeira classe. Acredito que a configuração do filtro precise ser inserida nesta classe, mas algo está um pouco errado com o código. Esta é minha primeira experiência com uma aplicação web, por isso peço ajuda de pessoas mais experientes. Obrigado. 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("/"); } }
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION