`
xidajiancun
  • 浏览: 454478 次
文章分类
社区版块
存档分类
最新评论

为什么采用filter实现了字符集的统一编码

 
阅读更多

为什么采用filter实现了字符集的统一编码

问题:

为什么会有字符集编码的问题呢?对于Java Web应用,使用Tomcat容器获取和传递的参数(request.getParameter())默认是iso8859-1编码格式,所以即使我们在页面统一使用中文编码GB2312,在request.getParameter()取得的参数仍会有乱码。

因此我们要对Tomcat获取的参数进行编码转换,采用request.setCharacterEncoding()response.setCharacterEncoding()会使得获取的参数与返回的结果和页面的(比如是GB2312)编码一致,这样就可以避免编码问题了。

但是这样的话,问题又来了,比如我们现在有很多的servletjsp,每个文件都要取得参数,这样的话每个servletjsp都要写request.setCharacterEncoding()response.setCharacterEncoding(),这样就有重复的代码,不简洁,这就需要用filter来帮忙了。

解决思路:

Filter是一层接口,横切在请求与Tomcat容器之间,它可以设置请求传递的数据编码格式或者说Tomcat取得参数与返回结果的字符编码。这样在servletjsp中就不用再写重复的代码了,由filter设置。采用Filter必须要实现javax.servlet.Filter接口,一个filter代码如下:

根据API,要实现其三个方法:initdoFilterdestroy,其核心是doFilter方法。该方法将拦截到的所有请求统一设置为指定的charEncode编码,然后将请求再发送下去,这样Tomcat得到的参数都是指定的编码格式了,也就实现了简化重复.

要想使用该filter,必须要配置该filter,就像servlet一样需要配置。其配置如下(web.xml)

<!-- 用于设置字符集的filter -->

其配置的大致与servlet是一致的,这样的话,任何以.jsp.do结尾的请求都会被fliter拦截到,从而用指定的编码设置字符集,这样就可以实现编码简洁了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics