Spring构建Web应用部署至Tomcat开发过程中的数据编码问题

来源:互联网 发布:matlab读取txt文件数据 编辑:程序博客网 时间:2024/05/20 08:44

  通过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,如下:

    /* 配置数据源 */@Beanpublic 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页面上的中文数据就可以正常显示了。

原创粉丝点击