jdbc-----代理器,过滤器

来源:互联网 发布:云盘推荐 知乎 编辑:程序博客网 时间:2024/06/06 03:22
package cn.itcast.filter;


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;
/**
 * 所有的编码处理,统一在这里进行处理
 * @author Administrator
 *
 */
public class EncodingFilter implements Filter {
/**
 * 处理公用的业务逻辑操作
 */
@Override
public void destroy() {
// TODO Auto-generated method stub

}


@Override
public void doFilter( ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
//转型
final HttpServletRequest req=(HttpServletRequest)request;
//处理公用业务

req.setCharacterEncoding("utf-8");//post提交有效
response.setContentType("text/html;charset=utf-8");
/**
* 创建代理对象
*/
HttpServletRequest proxy=(HttpServletRequest)Proxy.newProxyInstance(
request.getClass().getClassLoader(),//指定当前使用的类加载器
new Class[]{HttpServletRequest.class},//对目标对象实现的接口类型
new InvocationHandler(){
public Object invoke(Object Proxy, Method method, Object[] args)
throws Throwable {
//1.定义方法返回值
Object returnValue=null;
//2.获取方法名:
String name=method.getName();
//3.判断,对Parameter方法进行get提交处理
if("getParameter".equals(name)){
String methodSubmit=req.getMethod();
String value=req.getParameter(args[0].toString());
if("GET".equals(methodSubmit)){
if(value!=null&(!"".equals(value.trim()))){
value=new String(value.getBytes("ISO8859-1"),"utf-8");
}
}
return value;
}else{
returnValue=method.invoke(req, args);
}

return  returnValue;
}
});
//放行,执行下一个过滤器或者servlet
chain.doFilter(proxy,response);

}


@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}


}
0 0