当前位置: 首页 > 知识库问答 >
问题:

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

葛奇
2023-03-14

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

这里真正奇怪的是,当使用GET方法发送数据时,我根本没有任何问题。当我通过servlet中的属性集在请求中传递字符串时,结果也是一样的。

事实上,我已经通过将请求发送到servlet并在doPost方法中调用request.setCharacterEncoding(“UTF-8”)解决了这个问题(让我们准确地说,在调用request.getCharacterEncode()之前,调用request.getCharacterEncode()会给我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”),而且在我看来我必须这样做是不正常的,所以我想问题是:我一定要使用它吗?为什么?编码不应该由服务器的配置来处理吗?

我在服务器上使用Tomcat9,我在Ubuntu下(不知道它是否有帮助)。

共有1个答案

叶坚
2023-03-14

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

URL解码POST请求参数是另一回事。也就是说,webbrowser应该发送Content-Type请求头中使用的字符集。然而,大多数webbrowsers并不这样做。这些WebBrowser将使用与交付表单的页面相同的字符编码,即与HTTP响应或标记的Content-Type头中指定的字符集相同。

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

 类似资料:
  • 问题内容: 我在jsp文件中出现错误(在X行上),但这似乎都是正确的。 会是什么呢?是否在任何地方使用ServletException或javax.servlet.http? 问题答案: 对于第一个错误(),您需要将文件放入`classpath: 为此,请按照下列步骤操作: 右键单击该项目。 单击构建路径->配置构建路径 在库选项卡中->单击添加外部jar 选择档案 对于第二个错误:( ): 右键

  • 我有两个服务器,我可以从我的服务器的jsp调用另一个服务器的jsp。 就像下面的代码一样。首先是服务器JSP。 当我点击提交时,控件将进入第二个服务器,它将以name作为参数,并将其放入我的第二个服务器的jsp中。 第二服务器JSP. 我想使用Servlet做完全相同的事情。 我试图与Servlet的重定向我的控制将去第二服务器,但因为重定向它不会采取"名称"peramater。 我尝试使用For

  • 下面是我的一部分。jsp。 下面是我的错误: HTTP状态500–内部服务器错误 类型异常报告 消息在行[20]处处理[/home.jsp]时发生异常 说明服务器遇到意外情况,无法满足请求。 例外组织。阿帕奇。贾斯珀。JasperException:在第[20]行处理[/home.jsp]时发生异常 17:这是添加信息页 18: Stacktrace:org。阿帕奇。贾斯珀。servlet。Jsp

  • Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。 一个典型的响应看起来就像下面这样: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <ht

  • •JSP(它所做的只是显示一个字符串) •JSP位置:tomcat/webapps/hello/hello.jsp ·Java类(它所做的只是返回一个字符串) 包HelloWorld; 是什么引起的? 谢谢,

  • 本文向大家介绍JSP使用Servlet过滤器进行身份验证的方法,包括了JSP使用Servlet过滤器进行身份验证的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JSP使用Servlet过滤器进行身份验证的方法。分享给大家供大家参考,具体如下: 1、Servlet过滤器的作用描述 (1)在HttpServletRequest到达Servlet 之前,拦截客户的HttpServletRe