通过Maven构建整个工程,利用Spring进行web应用开发,数据库为MySQL,前端使用Thymeleaf模板,应用部署至Tomcat上。为了在HTML页面中正常显示从数据库读取的中文数据,对整个工程进行了如下的编码设置(都设置为UTF-8):
- Tomcat服务器的编码设置:在Tomcat安装路径下的conf/server.xml中进行如下设置
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
- Spring工程WEB-INF/web.xml中进行编码filter的设置
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 对html页面的编码格式进行设置(同时要注意设置html文件本身的存储编码格式为utf-8)
<head>
<meta charset=" UTF-8"></meta>
</head>
- 由于前端使用了Thymeleaf模板,所以在配置Thymeleaf的视图解析器和模板解析器时需要设置它们的编码格式为utf-8
@Bean
public ViewResolver viewResolver( //Thymeleaf 视图解析器
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/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
同时,MySQL中所使用的数据库与数据表的编码也要设置成UTF-8。此外在数据源的配置类中,也需要在数据源的url中加入参数characterEncoding=utf-8,如下:
/* 配置数据源 */ @Bean public BasicDataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/myblog?characterEncoding=utf-8"); ds.setUsername("root"); ds.setPassword("admin123"); ds.setInitialSize(5); return ds; }
这样,将工程部署至Tomcat上后,展现的HTML页面上的中文数据就可以正常显示了。