過濾器解決中文亂碼問題

package cn.itcast.demo1;


import java.io.IOException;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;


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;


/**

 * Servlet Filter implementation class EncodingFilter

 */

public class EncodingFilter implements Filter {


    /**

     * Default constructor. 

     */

    public EncodingFilter() {

        // TODO Auto-generated constructor stub

    }


/**

* @see Filter#destroy()

*/

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 {

//1、創建被代理對象

//強轉

final HttpServletRequest hsr = (HttpServletRequest) request;

//2、創建代理對象

HttpServletRequest proxyhsr = (HttpServletRequest) Proxy.newProxyInstance(hsr.getClass().getClassLoader(), hsr.getClass().getInterfaces(),new InvocationHandler() {

/**

* 處理程序

* 只需要增強getParameter方法

*/

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

if("getParameter".equals(method.getName())){

//增強

//分開解決亂碼

//判斷  請求方式

String m = hsr.getMethod();

if("GET".equalsIgnoreCase(m)){

//1、獲取之前亂碼值

String temp = (String) method.invoke(hsr, args);

//2、處理亂碼

temp = new String(temp.getBytes("iso8859-1"),"utf-8");

return temp;

}else if("POST".equalsIgnoreCase(m)){

hsr.setCharacterEncoding("utf-8");

return method.invoke(hsr, args);

}else{

//如果是其他提交方式,不處理亂碼,直接運行

return method.invoke(hsr, args);

}

}else{

//如果是其他方法,直接運行,不增強

return method.invoke(hsr, args);

}

}

});

chain.doFilter(proxyhsr, response);

}


/**

* @see Filter#init(FilterConfig)

*/

public void init(FilterConfig fConfig) throws ServletException {

// TODO Auto-generated method stub

}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章