1

私はこの問題に直面しています。フィルターの構成に従って (たとえば、UTF-8 に) 要求の文字エンコーディングを設定するフィルターがあります。これは、struts html:form タグを使用してコーディングされたフォームで機能します。しかし、通常の HTML フォーム タグを使用すると、データが正しくエンコードされません。

これは、web.xml のフィルター定義です。

<filter>
    <filter-name>Encoding Filter</filter-name>
    <filter-class>EncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
 </filter>
 <filter-mapping>
    <filter-name>Encoding Filter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

フィルターは次のとおりです。

public class EncodingFilter implements javax.servlet.Filter {
private String encoding;
public void init(FilterConfig filterConfig) throws ServletException {
    this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    filterChain.doFilter(request, response);
}
public void destroy() {
}

}

4

1 に答える 1

6

Struts タグを使用し<html:form>て METHOD 属性を省略すると、デフォルトで POST になります。標準の HTML を使用し<form>て METHOD 属性を省略すると、デフォルトで GET になります。

Tomcat は POST パラメータと GET パラメータを異なる方法で処理します。

POST:フィルターが使用されます。クライアントによって指定されていない場合にのみ、リクエストの文字エンコーディングを設定する必要があることに注意してください (フィルタは常に UTF-8 に設定しています)。Tomcat には、これを行うフィルター SetCharacterEncodingFilter.java が付属しています。

GET : Tomcat は ISO-8859-1 をデフォルトの文字エンコーディングとして使用します。GET パラメータの解釈方法を指定するには、次の 2 つの方法があります。

  • server.xml の要素の URIEncoding 属性を特定のものに設定します (例: URIEncoding="UTF-8")。
  • server.xml の要素の useBodyEncodingForURI 属性を true に設定します。これにより、コネクターは GET パラメーターに要求本文のエンコードを使用するようになります。

これはすべてです:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

于 2012-09-13T15:30:51.223 に答える