过滤器,监听器,拦截器
过滤器:主要的用途是过滤字符编码,做一些业务逻辑判断,随你的web应用启动而启动,只初始化一次,以后就可以拦截相关的请求,只有当你的web应用停止或者重新部署的时候才能销毁。
监听器:主要作用:做一些初始化的内容添加工作、设置一些基本的内容,比如一些参数或者是一些固定的对象,比如统计在线人数,当session创建时候数值就加1,当session销毁时候就减1.它是随着web应用的启动而启动,只初始化一次,随web应用的停止而销毁。
拦截器:面向切面编程应用,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法,在你调用方法前打印出字符串,也可以在你调用方法后打印字符串,甚至在你抛出异常时候做业务逻辑的操作。在*.xml中配置,定义拦截器实现HandlerInterceptor接口
preHandle方法:进入Handler方法之前执行。可以用于身份认证、身份授权。比如如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行(return false),否则就放行(return true)。
postHandle方法:进入Handler方法之后,返回ModelAndView之前执行。可以看到该方法中有个modelAndView的形参。应用场景:从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图。
afterCompletion方法:执行Handler完成之后执行。应用场景:统一异常处理,统一日志处理等。
在springmvc中,拦截器是针对具体的HandlerMapping进行配置的,也就是说如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器。
过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。
拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。
监听器(Listener):当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。
把整个项目的流程比作一条河,那么监听器的作用就是能够听到河流里的所有声音,过滤器就是能够过滤出其中的鱼,而拦截器则是拦截其中的部分鱼,并且作标记。所以当需要监听到项目中的一些信息,并且不需要对流程做更改时,用监听器;当需要过滤掉其中的部分信息,只留一部分时,就用过滤器;当需要对其流程进行更改,做相关的记录时用拦截器。
自定义拦截器的使用需要实现HandlerInterceptor
自定义拦截器的配置:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path=””>path后面路径是你的拦截器将要拦截这个路径下的所有请求
<mvc:exclude-mapping path=””>path后面路径是你指定拦截器不拦截当前路径下的请求
<bean class=””/>class后面路径是指你自定义的拦截器类的路径
</mvc:interceptor>
</mvc:interceptors>
异常处理:
<bean class=”org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”>
<property name=”exceptionMappings”>
<props>
<prop key=”java.lang.Exception”>error</prop>
Key代表的是异常类型,error代表的是发生异常时候页面跳转到error页面
</props>
</property>
</bean>
@ExceptionHandler注解实现异常处理