Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 带有Thymeleaf和Tomcat 8 UTF-8编码问题的Spring MVC_Spring Mvc_Tomcat_Encoding_Utf 8_Thymeleaf - Fatal编程技术网

Spring mvc 带有Thymeleaf和Tomcat 8 UTF-8编码问题的Spring MVC

Spring mvc 带有Thymeleaf和Tomcat 8 UTF-8编码问题的Spring MVC,spring-mvc,tomcat,encoding,utf-8,thymeleaf,Spring Mvc,Tomcat,Encoding,Utf 8,Thymeleaf,我对编码有一些问题。据我所知,我必须做这一切,我做到了。但在那之后,我的编码问题仍然存在。我使用的是SpringMVC、SpringSecurity、Thymeleaf、Tomcat8和Maven3 这是一些照片 我通过模型传递了字符串,它正在工作。 这是来自my message.properties文件的验证消息。发生编码错误。 我正在尝试将一些记录保存到数据库,但再次发生错误。 这就是我所做的 我编辑了Tomcat的server.xmlconfig并添加了UTF-8编码 <

我对编码有一些问题。据我所知,我必须做这一切,我做到了。但在那之后,我的编码问题仍然存在。我使用的是SpringMVC、SpringSecurity、Thymeleaf、Tomcat8和Maven3

这是一些照片

我通过模型传递了字符串,它正在工作。

这是来自my message.properties文件的验证消息。发生编码错误。

我正在尝试将一些记录保存到数据库,但再次发生错误。

这就是我所做的

我编辑了Tomcat的server.xmlconfig并添加了UTF-8编码

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/html/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode("LEGACYHTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setCacheable(false);

    return templateResolver;
}

@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());

    return templateEngine;
}

@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setContentType("text/html;charset=UTF-8");
    viewResolver.setCharacterEncoding("utf-8");

    return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <encoding>UTF-8</encoding>
    </configuration>
 </plugin>
server.xml

  <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           useBodyEncodingForURI="true"
           URIEncoding="UTF-8"
           redirectPort="8443" />
我所有的html文件都有这个用于编码的元标记行

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/html/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode("LEGACYHTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setCacheable(false);

    return templateResolver;
}

@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());

    return templateEngine;
}

@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setContentType("text/html;charset=UTF-8");
    viewResolver.setCharacterEncoding("utf-8");

    return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <encoding>UTF-8</encoding>
    </configuration>
 </plugin>
我用UTF-8编码创建了数据库,如下所示

postgres=# CREATE USER unicodeuser WITH PASSWORD 'mypass123'; 
postgres=# CREATE DATABASE unicode WITH ENCODING 'UTF8' OWNER unicodeuser; 
postgres=# GRANT ALL ON DATABASE unicode TO unicodeuser;
我创建了用于编码的JAVA_OPTS环境变量

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/html/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode("LEGACYHTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setCacheable(false);

    return templateResolver;
}

@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());

    return templateEngine;
}

@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setContentType("text/html;charset=UTF-8");
    viewResolver.setCharacterEncoding("utf-8");

    return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <encoding>UTF-8</encoding>
    </configuration>
 </plugin>
我还将我的pom.xml文件更改为UTF-8编码

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/html/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode("LEGACYHTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setCacheable(false);

    return templateResolver;
}

@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());

    return templateEngine;
}

@Bean
@Description("Thymeleaf view resolver")
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setContentType("text/html;charset=UTF-8");
    viewResolver.setCharacterEncoding("utf-8");

    return viewResolver;
}
JAVA_OPTS=-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <encoding>UTF-8</encoding>
    </configuration>
 </plugin>

UTF-8
...
org.apache.maven.plugins
maven资源插件
2.7
UTF-8

我尝试了互联网上的一切,但仍然找不到解决办法。任何关于我缺少什么的想法都很好。

fatiherdem,在所有情况下,您都不会注意Spring安全性。试试这个答案。我与您有相同的技术堆栈,这个答案对我来说很有用

我在验证消息方面遇到了同样的问题,所有的代码解决方案仍然不够。在我使用Intellij作为编辑器的情况下,我检查了
transapartent native to ascii conversion
,以解决这个问题。请查看我的完整答案。

您可以在流程之前使用thymeleaf评论的技巧:


CsrfFilter
之前放置
CharacterEncodingFilter
为我解决了编码问题。