Filterフィルタ-エンコードフィルタ

4641 ワード

Filterフィルタ-エンコードフィルタ


私たちはウェブページを開発するときにコードの問題に遭遇することが多いので、requestとresponseを取得するたびに実行しなければなりません.
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

これは非常に面倒になるが、Filterフィルタを使用すると符号化されたフィルタリングが簡単に実現される.下の2つの部分だけが必要です.

1.EncodingFilter.JAvaコードは以下の通りです

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;

public class EncodingFilter implements Filter {

    String encoding="";

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain fchain) throws IOException, ServletException {
        // 
        req.setCharacterEncoding(encoding);
        res.setCharacterEncoding(encoding);
        fchain.doFilter(req, res);  
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        // web.xml , 
        encoding=config.getInitParameter("encoding");
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }
}

2. web.xmlの構成は以下の通りです。

 <filter>
    <filter-name>EncodingFilterfilter-name>
    <filter-class>cn.filter.EncodingFilterfilter-class>

    <init-param>
        <param-name>encodingparam-name>
        <param-value>utf-8param-value>
    init-param>

  filter>

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

Filter実行順序


上記の2つのステップを経て、符号化フォーマットを統一するための符号化フィルタを設定することができ、多くのページでの符号化の問題を回避することができます.しかし、このとき細心の注意を払っている人は、もし2つのFilterがある場合、実行順序はどうなりますか?この点はネット上の説明を検証するのに長い時間がかかった.普通はFilterとwebにいると言っています.xmlでの宣言順序は関係していますが、私は搭乗操作中はそうではありません(私の環境に問題があることは排除されません)、逆にFilterの名前である文字列の大きさと関係が大きいのですが、nameが長くなるとルールに合わない場合がありますので、ここでポイントしてみます.興味があれば自分で試してみてください.正しい答えを見つけたら教えてください.ありがとうございます.