程序设计:添加一个专门测试乱码的前端和后端。
  
这样可以分析测试各种乱码情况:form表单提交,ajax提交。以此来推测出哪里出问题,程序大致是如何设置的。 ajax的post提交,后台不用处理,中文也不会乱码。(因为jquery处理了) ajax的get提交,后台需要处理,要么getBytes(),new String();要么改tomcat配置。
filter中使用动态代理对全局进行编码: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { final HttpServletRequest req = (HttpServletRequest) request; //使用动态代理完成全局编码 HttpServletRequest enhanceRequset = (HttpServletRequest) Proxy.newProxyInstance( req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //对getParameter方法进行增强 String name = method.getName();//获得目标对象的方法名称 if("getParameter".equals(name)){ String invoke = (String) method.invoke(req, args);//乱码 //转码 invoke = new String(invoke.getBytes("iso8859-1"),"UTF-8"); return invoke; } return method.invoke(req, args); } } ); chain.doFilter(enhanceRequset, response); }
|