Spring jsp页面编码问题

Spring jsp页面编码问题,spring,jsp,spring-mvc,character-encoding,Spring,Jsp,Spring Mvc,Character Encoding,我在JSP页面中解决了一些数据编码问题(我使用的是SpringMVC)。 看起来是这样的: <%@page contentType="text/html" pageEncoding="UTF-8"%> <% response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 response.setHeader("Pragma", "no-cache"); //HTTP 1.0 response

我在JSP页面中解决了一些数据编码问题(我使用的是SpringMVC)。 看起来是这样的:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%
     response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
     response.setHeader("Pragma", "no-cache"); //HTTP 1.0
     response.setDateHeader("Expires", 0);
     response.setCharacterEncoding("UTF-8");
     request.setCharacterEncoding("UTF-8");
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

.....
<form method="post">            
        <input type="text" name="txt" value="${Name}" />
        <input type="submit" value= OK /> 
</form>

........

.....
........
我的应用程序从输入文本框中获取文本并将其写入数据库(HSQLDB)。当我用英文字母写数据时,一切都很好!但当我试图在输入文本框中使用俄语字母时,它会以错误的编码形式写出一些奇怪的字母。如何避免这个问题


有什么想法吗?

您需要在
web.xml
中配置字符编码过滤器:

<filter>
    <filter-name>charsetEncodingFilter</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>
</filter>

<filter-mapping>
    <filter-name>charsetEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

字符编码过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
字符编码过滤器
/*
如果未指定请求编码,Servlet容器将请求后数据视为ISO-8859-1,而浏览器以页面编码(在您的情况下为UTF-8)提交表单,并且未指定编码,因此您需要一个过滤器来指定正确的请求编码


编辑:正如BalusC正确提到的,它不包括GET请求的编码问题。要在Tomcat上解决这个问题,您需要在
conf/server.xml
中的
上设置
URIEncoding=“UTF-8”
,您需要在
web.xml
中配置字符编码过滤器:

<filter>
    <filter-name>charsetEncodingFilter</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>
</filter>

<filter-mapping>
    <filter-name>charsetEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

字符编码过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
字符编码过滤器
/*
如果未指定请求编码,Servlet容器将请求后数据视为ISO-8859-1,而浏览器以页面编码(在您的情况下为UTF-8)提交表单,并且未指定编码,因此您需要一个过滤器来指定正确的请求编码


编辑:正如BalusC正确提到的,它不包括GET请求的编码问题。要在Tomcat上解决这个问题,您需要在
conf/server.xml中的
上设置
URIEncoding=“UTF-8”
,顺便说一句,您的
缓存控制项是。它在Firefox中不起作用。另外,两个
setCharacterEncoding()
调用都是多余的,因为对于
请求
one来说已经太晚了,而且您已经设置了
pageEncoding
,它已经隐式地执行
响应
one。哦。。。我不知道这件事。因此,我可以删除response.setCharacterEncoding(“UTF-8”);请求。setCharacterEncoding(“UTF-8”)?我试着把这一行放在这里来解决编码问题。但是所有这些都没有起作用,直到axtavt没有给我一个使用Spring编码过滤器的解决方案。它已经被处理(JSP是响应的一部分)。这需要在请求处理之前进行,而
过滤器是完成这项工作的唯一正确位置。对于响应来说,这只是重复,因为
pageEncoding=“UTF-8”
在封面下已经做到了这一点。顺便说一下,设置响应头最好也发生在过滤器中。这使您的JSP免于代码重复和混乱。另请参见。顺便提一下,您的
缓存控制项。它在Firefox中不起作用。另外,两个
setCharacterEncoding()
调用都是多余的,因为对于
请求
one来说已经太晚了,而且您已经设置了
pageEncoding
,它已经隐式地执行
响应
one。哦。。。我不知道这件事。因此,我可以删除response.setCharacterEncoding(“UTF-8”);请求。setCharacterEncoding(“UTF-8”)?我试着把这一行放在这里来解决编码问题。但是所有这些都没有起作用,直到axtavt没有给我一个使用Spring编码过滤器的解决方案。它已经被处理(JSP是响应的一部分)。这需要在请求处理之前进行,而
过滤器是完成这项工作的唯一正确位置。对于响应来说,这只是重复,因为
pageEncoding=“UTF-8”
在封面下已经做到了这一点。顺便说一下,设置响应头最好也发生在过滤器中。这使您的JSP免于代码重复和混乱。另请参见。对Spring用户的好建议,但需要注意的是,这只包括POST请求,而不包括GET请求。顺便说一句,这是一个。它基本上只做了
request.setCharacterEncoding()
if
request.getCharacterEncoding()
返回null。太好了!!!非常感谢,axtavt!我试图通过配置Tomcat设置来解决这个问题,但一切都帮不了我。Tomcat为请求编码提供的任何设置都涉及GET请求,而不是POST请求(HTTP
元素的
URIEncoding
属性)。对于Spring用户来说,这是一个很好的建议,但需要注意的是,这只涉及POST请求,而不是GET请求。顺便说一句,这是一个。它基本上只做了
request.setCharacterEncoding()
if
request.getCharacterEncoding()
返回null。太好了!!!非常感谢,axtavt!我试图通过配置Tomcat设置来解决这个问题,但一切都帮不了我。Tomcat为请求编码提供的任何设置都涉及GET请求,而不是POST请求(HTTP
元素的
URIEncoding
属性)。