如何指定 HTTP 请求参数的编码?

GlassFish 处理请求的 URI 编码的方式与处理其参数的编码的方式是不同的。如果是 GET 请求,则会将查询参数附加到 URI(由 <code>?</code> 分隔),而如果是 POST 请求,则会将其包含在请求主体内部。

在不同的位置指定这两种类型的编码:

  • 可以将 URI 编码指定为 <code>domain.xml</code> 中 <code><http-listener></code> 元素的名为 <code>uriEncoding</code> 的属性的值。该编码默认为 <code>UTF-8</code>,适用于相应的 HTTP 侦听器接收到的任何请求 URI。
  • 另一方面,请求参数编码默认为 <code>ISO-8859-1</code>,可以在以下两个位置之一进行覆盖:通过调用 ServletRequest 的 <code>setCharacterEncoding</code> 方法以编程方式在 servlet 内部进行覆盖,或通过将参数编码指定为 <code>sun-web.xml</code> 中 <code><parameter-encoding></code> 元素的 <code>default-charset</code> 属性的值以声明方式进行覆盖,如以下示例所示,这里将请求的参数编码设置为 <code>UTF-8</code>:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd">

<sun-web-app>
  <locale-charset-info default-locale="">
    <locale-charset-map locale="" charset=""/>
    <parameter-encoding default-charset="UTF-8"/>
  </locale-charset-info>
</sun-web-app>

英文