当前位置: 首页 > 面试题库 >

如何在Tomcat中设置请求编码?

狄易安
2023-03-14
问题内容

我的Java Web应用程序有问题。

这是index.jsp中的代码:

<%@page contentType="text/html" pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<% request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>

        <form action="index.jsp" method="get">
            <input type="text" name="q"/>
        </form>

        Res: <%= request.getParameter("q") %>
    </body>
</html>

当我有线请求时,我的浏览器发送以下标头:

GET /kjd/index.jsp?q=%C3%A9 HTTP/1.1\r\n
...
Accept-Charset: UTF-8,*\r\n

Tomcat服务器返回以下信息:

Content-Type: text/html;charset=UTF-8\r\n

但是,如果我以我的形式发送“é”(UTF-8中的%C3%A9),则会显示“é”。

我了解的是浏览器发送了一个用UTF-8(%C3%A9)编码的“é”。

但是服务器将其解释为ISO-8859-1。因此,%C3解码为Ã,%A9解码为©,然后发送回以UTF-8编码的响应。

在代码中,应使用UTF-8解码请求:

request.setCharacterEncoding("UTF-8");

但是,如果我发送此网址:

http://localhost:8080/kjd/index.jsp?q=%E9

ISO-8859-1将“%E9”解码,并显示“é”。

为什么这不起作用?为什么用ISO-8859-1解码请求?

我已经在Tomcat 6和7以及Windows和Ubuntu上尝试过。


问题答案:

request.setCharacterEncoding("UTF-8");只设置请求的编码体(其被用于通过POST请求),而不是请求的编码URI(其被用于由GET请求)。

你需要在Tomcat的元素中将URIEncoding属性设置为UTF-8,以使Tomcat将请求URI(和查询字符串)解析为UTF-8。这确实默认为ISO-8859-1。另请参见Tomcat HTTP连接器文档。<Connector>/conf/server.xml

<Connector ... URIEncoding="UTF-8">

或确保使用与正文1相同的编码来解析URI :

<Connector ... useBodyEncodingForURI="true">


 类似资料:
  • 问题内容: 我正在从Java中的Web servlet调用SAP SOAP服务。由于某种原因,每次我在请求的字段中使用特殊字符(例如“è”或“à”)时,SAP都会给我一个错误。SOAP Service的WSDL在UTF-8中定义,我已经相应地设置了字符编码,如下所示。但是我不确定这是正确的方法。另外,请注意,如果我使用SOAP UI(具有相同的信封),则请求可以正常工作,因此它一定是Java方面的

  • 问题内容: 我在Go中做一个简单的http GET: 但是我找不到在doc中自定义请求标头的方法,谢谢 问题答案: 请求的字段是公共的。您可以这样做:

  • 我有两个URL,第一个是BaseURL创建用户,第二个是用来为asLongAs循环中的每个用户设置密码。我在第二个url请求中设置“计数器”时遇到问题,即“更改密码”。它在错误下面抛出, 9425[GatlingSystem-akka.actor.default-调度-11]ERRORi.g.http.action.HttpRequest estAction-'httpRequest-4'执行失败

  • 从我的servlet中,我调用以下方法: 但在Tomcat8.5日志文件(/Tomcat/logs/localhot.yyyy-mm-dd.log)中,我获得了编码错误的文本: 有人知道如何将日志字符集设置为ISO-8859-1吗?

  • 问题内容: 我在Go中制作了一个URL提取程序,并具有要提取的URL列表。我将请求发送到每个URL并获得他们的响应。 如何为每个Get请求设置自定义超时?(默认时间很长,这会使我的提取程序非常慢。)我希望提取程序的超时时间为40-45秒左右,之后它应该返回“请求超时”并移至下一个URL。 我该如何实现? 问题答案: 显然在Go 1.3中,http.Client具有“超时”字段 这为我完成了窍门。

  • 我正在制作一个URL提取器,并有一个要提取的URL列表。我向每个URL发送请求并获取它们的响应。 如何为每个Get请求设置自定义超时?(默认时间很长,这使得我的取数器非常慢。)我希望我的提取器有一个大约40-45秒的超时,之后它应该返回“Request timed Out”并移动到下一个URL。 我怎样才能做到这一点呢?