继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

SpringMVC中的乱码(六)

慕雪血影
关注TA
已关注
手记 9
粉丝 1
获赞 9

1.1. 关于乱码

        在处理中文或非ASCII字符(需要使用输入法才可以输入的)时,如果存、取时,使用的字符编码不统一,就会出现乱码!

        所以,出现乱码原因就是因为字符编码不统一,而解决问题的方案就是使用统一的编码!

需要统一编码的位置有:项目源码、数据库、处理数据的服务端组件、数据传输过程、#显示界面

1.2. 解决控制器中接收请求参数的乱码

        通常,在Java EE项目中,解决问题的方式是:

request.setCharacterEncoding("utf-8");

        由于Controller是运行在DispatcherServlet之后的,在Controller内部再执行更改编码格式已经晚了,事实上SpringMVC框架在DispatcherServlet之前就存在CharacterEncodingFilter可以确定请求与响应的编码格式,所以,在SpringMVC中,无法通过Controller或Interceptor来解决请求和响应的乱码问题。

        在SpringMVC框架的CharacterEncodingFilter中,把使用的字符编码设计为变量,可以在web.xml中添加配置加以应用,来统一设置编码:

<!-- 配置字符编码过滤器 -->

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


2.3. 拦截器与过滤器有什么区别

拦截器是Interceptor,过滤器是Filter;

拦截器是SpringMVC中的组件,过滤器是Java EE中的组件;

拦截器是配置在Spring的配置文件中的,过滤器是配置在web.xml中的;

拦截器是运行在DispatcherServlet之后、Controller之前的,且在Controller执行完后还会调用2个方法,而过滤器是运行在所有的Servlet之前的;

拦截器的配置非常灵活,可以配置多项黑名单,也可以配置多项白名单,过滤器的配置非常单一,只能配置1项过滤路径;

拦截器与过滤器也有很多相似之处,例如:都可拒绝掉某些访问,也可以选择放行;都可以形成链。

相比之下,在一个使用SpringMVC框架的项目中,拦截器会比过滤器要好用一些,但是,由于执行时间节点的原因,它并不能完全取代过滤器!


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP