6

Spring MVC が提供する CharacterEncodingFilter を見ていました。リクエストのエンコーディングが指定されたエンコーディングに強制されたときに、レスポンスのエンコーディングを設定することしかできなかったのはなぜですか? Acceptヘッダーフィールドに何も指定されていない場合、デフォルトの応答エンコーディングを設定できないのはなぜですか? または、リクエストにエンコーディングが含まれていない場合は?

コード:

@Override
protected void doFilterInternal(
  HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
  throws ServletException, IOException {

  if (this.encoding != null && (this.forceEncoding 
      || request.getCharacterEncoding() == null)) {

    request.setCharacterEncoding(this.encoding);
    if (this.forceEncoding) {
      response.setCharacterEncoding(this.encoding);
    }
  }
  filterChain.doFilter(request, response);
}

これは 、リクエストエンコーディングが強制的に設定されます。なんで?

前もってありがとう、マーティン

4

2 に答える 2

5

リンクhttps://jira.springsource.org/browse/SPR-3328?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel

次のフィルターを web.xml (サーブレット 2.4+) に追加して、encoding を設定します。

<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
     <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

編集 :

CharacterEncodingFilter : 現在のブラウザーは通常、HTML ページまたはフォームで指定されていても、文字エンコーディングを設定しません。上記のフィルタは、リクエストでエンコーディングが指定されていない場合にそのエンコーディングを適用するか、いずれの場合にもこのフィルタのエンコーディングを適用できます("forceEncoding"="true")。文字を厳密にエンコードしたい場合は、強制的に設定します。

  1. リクエストのエンコーディングが指定されたエンコーディングに強制された場合にのみ、レスポンスのエンコーディングを設定できたのはなぜですか?
  2. Acceptヘッダーフィールドに何も指定されていない場合、デフォルトの応答エンコーディングを設定できないのはなぜですか? または、リクエストにエンコーディングが含まれていない場合は?

コメントのBoris's リンクがこれらの質問に答えると思います。

于 2012-07-27T10:18:32.210 に答える