过滤器实现对request的编码

第一步:声明包装类:

//声明包装类

class MyRequestextends HttpServletRequestWrapper{

    public MyRequest(HttpServletRequest request) {

       super(request);

    }

    //增强getParamter

    @Override

    public String getParameter(String name) {

       String val = super.getParameter(name);

       if(super.getMethod().equals("GET")){

           try {

              val = new String(val.getBytes("ISO-8859-1"),super.getCharacterEncoding());

           } catch (UnsupportedEncodingException e) {

              e.printStackTrace();

           }

       }

       return val;

    }

}

 

第二步:在doFilter方法中,声明包装类的实例

package filter;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

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 javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;


public class CharFilter implements Filter {

    // 声明编码的成员变量

    private Stringencoding;

 

    public void init(FilterConfig config) throws ServletException {

       encoding = config.getInitParameter("bm");

    }

 

    public void doFilter(ServletRequest request, ServletResponseresponse,

           FilterChain chain) throws IOException, ServletException{

       request.setCharacterEncoding(encoding);

       response.setContentType("text/html;charset=" +encoding);

       // 判断是否需要包装

       HttpServletRequest req = (HttpServletRequest) request;

       if (req.getMethod().equals("GET")) {[W1] 

           request= new MyRequest(req);[W2] 

       }

       // 声明包装类的实例

       // 放行

       chain.doFilter(request, response);

    }

    public void destroy() {

    }

}


 [W1]判断是否需要包装,以提高性能。

 [W2]实例化包装类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值