拦截器和过滤器的区别:
1、过滤器(filter)是在请求进入容器(tomcat)之后,但是请求进入Servlet之前。请求结束返回时也是在Servlet处理完之后,返回给前端之前。比如:过滤掉非法url或者在传入servlet前设置统一字符集。
2、拦截器(Interceptor)只对action请求起作用,而过滤器(filter)则可以对几乎所有的请 求起作用。是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者 在方法后调用一个方法。
过滤器:Filter
使用:
(1):自定义一个类(XxxFilter),实现于javax.servlet.Filter接口.
(2):在web.xml中做配置,让Tomcat来管理这一个类(负责了该类的生命周期).
执行流程:
在启动tomcat时,就会执行构造器—>init方法—>doFilter方法—>destroy方法
web.xml里设置拦截
<filter>
<filter-name>XXXFilter</filter-name>
<filter-class>自定义XXXFilter全限定名</filter-class>
</filter>
<filter-mapping>
<!--表示:当前Filter对那些资源进行拦截,列如:page包下所有,所有jsp界面等-->
<filter-name>XXXFilter</filter-name>
<url-pattern>/page/*</url-pattern>
<url-pattern>*.jsp</url-pattern>
<url-pattern>/css/*</url-pattern>
<url-pattern>/img/*</url-pattern>
</filter-mapping>
实现Filter接口实现里面的方法(javax.servlet)
package com.zhongruan.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* date:2020-03-02
* author:zxs
*/
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 过滤器初始
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 执行过滤方法
// ServletRequest是接口,HttpServletRequest是实现,但是有些方法是HttpServletRequest独有的,比如getSession
// HttpServletRequest 接口是继承servletRequest接口,增加了Http相关的方法
}
@Override
public void destroy() {
// 过滤器销毁
}
}
拦截器:Interceptor
使用:
(1):自定义一个类(XXXInterceptor),实现于org.springframework.web.servlet.HandlerInterceptor接口.
(2):在spring-mvc.xml中配置,设置拦截页面
执行流程:
拦截器在springmvc中的配置
<mvc:interceptors>
<mvc:interceptor>
<!--拦截所有对的mvc控制器-->
<mvc:mapping path="/**"/>
<!--放行机制,可以测试/指定对某个页面不进行拦截-->
<mvc:exclude-mapping path="XXX"/>
<!--指定使用哪个拦截器-->
<bean class="自定义XXXInterceptor全限定名"/>
</mvc:interceptor>
</mvc:interceptors>
实现HandlerInterceptor接口重写里面方法
package com.zhongruan.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* date:2020-03-02
* author:zxs
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//在拦截点执行拦截,若果返回的true则不执行拦截点后的操作(拦截成功)
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//处理过程中,执行拦截
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//执行完毕,返回拦截前
}
}