1.1GetPostEncodingFilter过滤器类 public class GetPostEncodingFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException { //强转 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; //创建普通类 RequestProxy requestProxy = new RequestProxy(request); //设置响应类型与编码 response.setContentType("text/html;charset=UTF-8"); //发行请求,进入GetPostServlet chain.doFilter(requestProxy.getProxy(),response); } public void init(FilterConfig filterConfig) throws ServletException { } } 1.2HttpServletRequest的动态代理对象 /** * @author Administrator * 用于产生HttpServletRequest的动态代理对象 */ class RequestProxy{ /** * 目标对象 */ private HttpServletRequest request; /** * 通过构造器为request设置值 */ public RequestProxy(HttpServletRequest request) { this.request = request; } /** * 产生HttpServletRequest的代理对象(重点) */ public HttpServletRequest getProxy(){ return (HttpServletRequest)Proxy.newProxyInstance( this.getClass().getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler(){ public Object invoke(Object proxy, Method method,Object[] args) throws Throwable { Object returnValue = ""; String methodName = method.getName(); if("getParameter".equals(methodName)){ //获取客户端请求的类型 String requestType = request.getMethod(); //如果是GET请求的话 if("GET".equals(requestType)){ //获取表单提交的用户名和性别 String temp = (String) method.invoke(request,args); //如果非空 if(temp!=null && temp.trim().length()>0){ //转还 byte[] buf = temp.getBytes("ISO8859-1"); //手工装配 returnValue = new String(buf,"UTF-8"); } //如果是POST请求的话 }else if("POST".equals(requestType)){ //设置编码方式 request.setCharacterEncoding("UTF-8"); //获取表单提交的用户名和性别 returnValue = method.invoke(request,args); } }else{ returnValue = method.invoke(request,args); } return returnValue; } }); } }