動態代理編寫統一編碼
package com.itheima.c_proxy.encoding;
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; import javax.servlet.http.HttpServletResponse;
public class EncodingFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub
}
@Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // 1強轉 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp;
// 建立代理物件 HttpServletRequest requestProxy = (HttpServletRequest) Proxy.newProxyInstance( HttpServletRequest.class.getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler() {
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if("getParameter".equals(method.getName())) { //獲取請求方式 String m = request.getMethod(); if("get".equalsIgnoreCase(m)) { String s = (String) method.invoke(request, args);//相當於resquest.getParameter(args); return new String(s.getBytes("iso8859-1"),"utf-8"); }else if("post".equalsIgnoreCase(m)){ request.setCharacterEncoding("utf-8"); return method.invoke(request, args); } } //不需要加強的方法 return method.invoke(request, args); } });
// 2放行 chain.doFilter(requestProxy, response); }
@Override public void destroy() { // TODO Auto-generated method stub
}
}