在Tomcat服务器上从jsp到jsp的POST方法使用错误的编码

时间:2018-11-20 15:28:25

标签: java tomcat post encoding

我目前正在学习JEE,在一个练习中,我只需要使用带有POST方法的基本格式将文本数据从.jsp文件发送到另一个文件。以这种形式,我希望能够使用带重音的字符,因此我在jsp文件的顶部使用了<%@page pageEncoding="UTF-8" %>,它们同时具有<meta charset="utf-8">标记,并且我的IDE(Eclipse)已配置为编码UTF-8中的所有内容。

问题是,在行的结尾,当我尝试使用EL显示我的字符时,重音字符(以及我猜想的其他字符)都以ISO-8859-1编码。

在这里真正独特的是,使用GET方法发送数据时,我根本没有任何问题。通过Servlet中设置的属性在请求中传递String时,结果相同。

事实上,我已经通过将请求发送到servlet并在doPost方法中调用request.setCharacterEncoding("utf-8")来解决了这个问题(确切地说,在此之前调用request.getCharacterEncoding()会给我null),但是我想了解这里到底发生了什么。我猜它来自服务器配置错误,但是当我检查服务器配置的web.xml文件时,有以下几行:

<filter>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

我的困惑来自于没有人告诉我使用request.setCharacterEncoding("utf-8")的事实,而且我认为这样做非正常,所以我想问题是:绝对要用吗?为什么呢不应通过服务器的配置来处理编码吗?

我正在使用Tomcat 9作为服务器,并且在Ubuntu下(不知道它是否有帮助)。

1 个答案:

答案 0 :(得分:0)

答案在这里(感谢Selaron):http://balusc.omnifaces.org/2009/05/unicode-how-to-get-characters-right.html

  

URL解码POST请求参数是一个故事。网络浏览器   即应该发送Content-Type中使用的字符集   请求标头。但是,大多数网络浏览器都不这样做。那些   webbrowsers只会使用与网页相同的字符编码   该表格是随同提供的,即与指定的字符集相同   在HTTP响应或标签的Content-Type标头中。

基本上,问题来自导航器,该导航器应传递其在标头请求中使用的编码字符集,但不这样做。由于没有给Tomcat任何字符集来解码请求,因此默认情况下,它自行决定执行ISO-8859-1样式。显然,您无法进行配置!因此,您只需通过指示编码字符集为UTF-8来强制使用它即可。

我猜写我正在关注的讲座的那个人有一个更好的导航器,因为他从未提到过这个问题。无论如何,现在我感觉好多了!非常感谢!