通过filter过滤器处理全站编码问题

编码一直是编写程序较为烦人的一点,在javaweb中,比如服务器tomcat编码是ios-8859-1,所以处理编码通常是servlet中对request和response调用request.setCharacterEncoding("utf-8"),但是这种方法只能处理post请求,get请求需要对每一个参数都进行重新编码,十分繁琐。所以想通过编写一个过滤全部访问资源的过滤器和一个重写了request.getParameter(arg0)这个方法的类(装饰者模式对request装饰)然后filter通行。将传递到servlet的request修改了。只要导入下面两个类,就完成了全站的编码了。代码实现:

//重写的类

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/*
 * 装饰request
 * @author cxf
 */

public class EncodingRequest extends HttpServletRequestWrapper{

    private HttpServletRequest req;
    public EncodingRequest(HttpServletRequest request) {
        super(request);
        this.req=request;
        
    }
    
    @Override
    public String getParameter(String name)
    {
          String n=req.getParameter(name);
        try {
             n=new String(n.getBytes("ISO-8859-1"),"UTF-8");
            
            
        } catch (UnsupportedEncodingException e) {
            // TODO 自动生成的 catch 块
            throw new RuntimeException(e);
        }
        
        return n;
        
    }
    

}

//filter

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

@WebFilter("/*")
public class encodingFilter implements Filter {

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

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        HttpServletRequest req=(HttpServletRequest)request;
        if(req.getMethod().equals("GET"))
        {
            EncodingRequest er=new EncodingRequest(req);
            
            chain.doFilter(er, response);
        }else if(req.getMethod().equals("POST"))
        {
            
            chain.doFilter(request, response);
        }
        
        
        
    }

    
    public void init(FilterConfig fConfig) throws ServletException {
        
    }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值