333333333333333
过滤器: 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等
拦截器:依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理
<init-name> <param-name>encoding</param-name>//必须是encoding <param-value>UTF-8<param-value> </init-name>
过滤器解决中文乱码问题
SpringMVC拦截器的工作原理
解决乱码问题:SpringMVC提供的一个过滤器类(在org.springframework.web-3.0.1.RELEASE-A.jar——>org.springframework.web.filter)CharacterEncodingFilter可以解决该问题。
案例:配置SpringMVC过滤器,和过滤器相似通过<filter>和<filter-mapping>进行配置,只不过过滤器的<filter-class>是自己手动编写,而SpringMVC提供的不用再手动去设置字符集(自定义过滤器实现Filter接口,并手动获取request对象,然后再设置字符集为UTF-8,再跳转页面,SpringMVC是固定的,也就是<init-param>中的<param-name>的值是encoding,<param-value>的值是utf-8)
拓展:关于web.xml的url映射的小知识:
< url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
< url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)
注意一下CharacterEncodingFilte只可以过滤post请求编码
拦截器与过滤器的区别 :1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
拦截器的基本工作原理
过滤乱码,需要配置过滤器,需要配置在web.xml 中对全局服务器都进行过滤
<url-pattern>*</url-pattern> 是过滤所有请求
filter过滤器可以针对编码及其他问题进行解决
filter 过滤器解决编码问题
拦截器的基本原理
拦截器工作原理
Spring MVC可以通过配置过滤器来解决乱码问题.
Spring MVC默认提供了CharacterEncodingFilter过滤器类,来对客户端的请求进行编码设置.
在web.xml中配置该过滤器
通过过滤器解决乱码:
<filter>
<filter-name>encoding</>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</>
<init-param>
<param-name>encoding</>
<param-value>utf8</>
</>
</>
<filter-mapping>
<filter-name>encoding</>
<url-pattern>*</>
</>
web.xml 中配置出 filter
拦截器工作原理
Spring MVC可以通过配置过滤器来解决乱码问题.
Spring MVC默认提供了CharacterEncodingFilter过滤器类,来对客户端的请求进行编码设置.
在web.xml中配置该过滤器
将路径剪切到web.xml中
设置utf-8编码
过滤器解决请求乱码问题
相似点是处理业务中的共性问题。
拦截器可以出现在业务代码的任何位置,使用方式为方法的回调方式
过滤器在一个请求中仅被调用一次。
(个人理解,如有异常,请帮忙指出或处理,谢谢)
过滤器的配置
Spring MVC可以通过配置过滤器来解决乱码问题. Spring MVC默认提供了CharacterEncodingFilter过滤器类,来对客户端的请求进行编码设置. 在web.xml中配置该过滤器: <filter> <filter-name>charset</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--配置名为encoding的参数(固定值),指定所有请求会经过这个filter,并且将所有请求的请求编码设置为utf8--> <init-param> <param-name>encoding</param-name> <param-value>utf8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charset</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 过滤器与拦截器原理类似 区别是过滤器是最先对请求进行拦截,拦截器是当请求通过过滤器之后,在请求到达Controller之前进行拦截.当执行完Controller的方法之后再依次递归返回执行. 过滤器与拦截器都能在Controller方法执行的前后进行一些工作.