过滤器教程视频_Filter应用之中文乱码之分析

过滤器教程视频_Filter应用之中文乱码之分析

更新时间:2017年04月10日

  • 网盘提取码:agft
  • 适合对象:Java框架爱好者,Java开发工程师
  • qq号:2158476996
一键免费下载

下载介绍

更多>>
过滤器教程视频_Filter应用之中文乱码之分析

下面我们再来分析一下乱码产生的原因:当浏览器将包含有中文(例如 UTF-8 编码)参 数的请求(无论是 GET 还是 POST 请求),以字节序列的形式发送到服务器后,服务器会按 照其默认的字符编码 ISO8859-1 进行解码,并将解码后的字符存放到 ParameterMap 中。此 时的 ParameterMap 中存放的字符其实已经是乱码了,因为将 UTF-8 的字符序列解码为 ISO8859-1 的字符,当然会出现乱码。 要从根本上解决这个乱码问题,我们可以在参数存放到 ParameterMap 之前,将字符序 列按照其原有的中文编码(UTF-8)进行解码,正确解码后的字符再存放到 ParameterMap 中。这样 Servlet 再从 ParameterMap 中读取参数,就不会出现乱码了。 不过,有个问题:向ParameterMap中存放数据是由服务器自动完成的,“向ParameterMap 中存放数据”这个时间点程序员无法捕获。怎么办?我们的解决方案思路是,自定义一个 HttpServletRequest 类型,该类型是 HttpServletRequest 的一个装饰者。让这个装饰者重写 HttpServletRequest 中请求参数相关方法。例如,重写 getParameterMap()方法,在该方法中 定义一个 Map,并将原始 ParameterMap 中存放的乱码问题解决后,将数据存放到这个新的 Map 中。然后,再重写其它参数相关方法,让这些方法获取请求参数,直接从这个新的 Map 中获取。这样乱码问题就得以解决。 也就是说,将来整个应用中所有的请求对象将使用我们自定义的这个请求的装饰者。这 个替换工作可以通过过滤器完成,即所有请求到达应用后,首先经过这个过滤器,将 HttpServletRequest 请求替换为装饰者。

Java相关视频锦集

返回顶部