SpringMVC + thymeleaf + html5 乱码种种坑

来源:互联网 发布:淘宝卖家营销策略 编辑:程序博客网 时间:2024/05/29 03:50

概述:

又消费一个下午解决乱码问题:

乱码1 :html网页显示乱码 


你可能想到设置

步骤一:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   不行

步骤二:右键选择properties 设置字符编码为UTF-8     还不行

步骤三:设置tomcat请求字符编码  还是不行

步骤四:是时候修理一下thymeleaf的渲染器 这里两个地方都要设置字符编码,不要忘了

@Bean
public TemplateEngine templateEngine(TemplateResolver templateResolver){
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
@Bean
public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {

ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine);
//viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}

@Bean
public TemplateResolver templateResolver(){
TemplateResolver templateResolver = 
new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/template/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
//templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;

}

显示问题解决了

第二个乱码: 输入框乱码,就是输入中文,回显保存信息,发现乱码了


步骤一: 设置表单请求头的接受的字符编码   发现不行

<form method="POST" th:object="${spitter}" accept-charset="UTF-8">

步骤二:spring不是自带字符编码过滤器:

package com.jack.config;import javax.servlet.Filter;import org.springframework.web.filter.CharacterEncodingFilter;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;/** * 在Servlet3.0环境中,容器会在类路径中查询实现 * javax.servlet.ServletContainerInitializer 接口的类,如果发现的话,就会用它来配置Servlet容器 * @author Administrator * */public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class<?>[]{RootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return  new Class<?>[]{WebConfig.class};}/*  * 将DispatchServlet映射到"/" * (non-Javadoc) * @see org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer#getRootConfigClasses() */@Overrideprotected String[] getServletMappings() {return new String[] {"/"};}@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter c = new CharacterEncodingFilter();c.setEncoding("UTF-8");c.setForceRequestEncoding(true);return new Filter[] {c};  }}
//重写父类的过滤器,设置为UTF-8 ,如果是xml,直接在web.xml 配置就行
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter c = new CharacterEncodingFilter();
c.setEncoding("UTF-8");
c.setForceRequestEncoding(true);
return new Filter[] {c};  
}

效果:


总结: http一直在处理中文乱码问题

原创粉丝点击