struts2.2.3中国語文字化けしフィルタの配置


JAvaプログラミングで中国語の文字化けしの問題は、プログラマーを悩ませる問題だった.
データベースの出入りするデータ、私达はしばらくそれを気にしないで、私达は先にページからプログラムの文字化けの问题を解决して、后ろのあれはすべて后ろの话です.
ステップ1:
jspページ符号化統一問題は,これが最も解決しやすい.
<%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GBK"%>

GBKを例にとると,jspページに上記の文を加えることでページ符号化の問題を解決できる.
ここでpageEncoding="GBK"は解決ページjavaコードモジュール符号化であり、contentType="text/html;charset=GBK"は解決ページ静的部分符号化である.
さあ、最初のステップは簡単に解決します.2歩目を始めるつもりですが、2歩目の前に、説明しておきます.
jspの操作フローは、jspが各種要求を受け入れ、servlet処理に転送することである.この過程で中国語の文字化けしが発生します.この文字化けしが発生した原因を知ると、やりやすくなり、次は第2歩です.
ステップ2:
ここでStruts 2を使いました.2.3、今より新しいバージョンでしょう.struts 2はservletをカプセル化し,actionによってjspのページ要求を処理することを知った.
struts 2を使った以上、私たちのweb.xmlはstruts 2のブロッキングを構成しているに違いない.構成コードは次のとおりです.
<filter>
          <filter-name>struts2</filter-name>
          <filter-class>
              org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
          </filter-class>
</filter>
<filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
</filter-mapping>  

このセグメントは、struts 2にすべてのリクエストをブロックして処理します.しかし、符号化の問題はどのように解決しますか?焦らないで、続けて見てください.
手書き文字符号化フィルタのクラス.コードは次のとおりです.
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;

public class EncodeFilter extends StrutsPrepareAndExecuteFilter implements Filter  {
    private FilterConfig config = null;
    private String encoding = null;
    
    @Override
    public void init(FilterConfig config) throws ServletException {
       this.config = config;
    }
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
           FilterChain chain) throws IOException, ServletException {
        if (encoding == null) {
            encoding = config.getInitParameter("encoding");
           }
           request.setCharacterEncoding(encoding);
           response.setCharacterEncoding(encoding);
           chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        config = null;
        encoding = null;
    }
}

フィルタのクラスができたら、必ずwebに配置します.xmlで行けます.そこでweb.xmlプロファイルに次のコードを追加します.
<filter>
           <filter-name>encodeFilter</filter-name>
           <filter-class>com.org.midland.common.EncodeFilter</filter-class>
           <init-param>
               <param-name>encoding</param-name>
               <param-value>GBK</param-value>
           </init-param>
</filter>
<filter-mapping>
           <filter-name>encodeFilter</filter-name>
           <url-pattern>/*</url-pattern>
</filter-mapping>

OK、2歩目はここで完成しました.jspページでフォームの提出を行うときに文字化けしていませんか?どうしたの?文字化けしてありますか?はい、まだ最後の一歩があるからです.
以上の2つのステップは、フォームのpost提出時に文字化けして問題はありません.しかし、フォームがgetコミットされると文字化けします.urlパラメータ付きのリクエストも中国語の文字化けしの問題もあります.どうやって解決するの?急いでいません.まだ3歩目があります.次は3歩目です.
ステップ3:
アプリケーションサーバのエンコードを構成します.ここではtomcatを例に挙げます.serverを見つけます.xmlというプロファイルは、次の場所にあります.
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>

      URIEncoding="GBK"       

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="GBK" />

はい、サーバ符号化は解決しました.サービスが走ってきて、中国語の文字化けしの問題があるかどうか見てみましょう.ないでしょう.
3歩ですべての文字化けしを解決した.△ちょっと大きく吹きました.
私は自分でテストして、プログラマーの子供靴に少し助けてほしいです.
注意:統一符号化のために、私たちのプログラミングツールもGBKモードに変更したほうがいいです.JavaソースコードがGBKモードのものです.そうでなければ、問題があるかもしれません.