get或post請求的中文亂碼問題解決
阿新 • • 發佈:2018-11-25
增加一個過濾器對傳過來的請求進行加強
package Test; 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; public class EncodingFilter implements Filter { public EncodingFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //將Request物件轉化為HttpServletRequest final HttpServletRequest req = (HttpServletRequest)request; HttpServletRequest myReq = (HttpServletRequest)Proxy.newProxyInstance(EncodingFilter.class.getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = null; if(method.getName().equalsIgnoreCase("getParameter")) { //獲取本次請求的方式 String md = req.getMethod(); if("post".equalsIgnoreCase(md)) { req.setCharacterEncoding("utf-8"); obj = method.invoke(req, args); }else { //get方式請求 //呼叫req物件上的getParameter的方法 String v = (String)method.invoke(req, args); //轉碼 // String vv = new String(v.getBytes("iso-8859-1"),"utf-8"); return v; } }else { obj = method.invoke(req, args); } return obj; } }); System.out.println(myReq.hashCode()); //將代理物件放行 chain.doFilter(myReq, response); } public void init(FilterConfig fConfig) throws ServletException { } }