繁体   English   中英

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

[英]Wrong encoding using POST method from jsp to jsp on a Tomcat server

我目前正在学习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 ),但是我d想了解这里到底发生了什么。 我猜它来自服务器配置错误,但是当我检查服务器配置的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下(不知道是否有帮助)。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM