Spring 的拦截器与Servlet的过滤器有类似之处,两者都是AOP编程思想的体现,均可以实现权限的检查,日志记录等html
① 使用范围不一样: Filter是Servlet规范规定,只能用在web程序中,而拦截器,除了web程序,也能够用于Application,Swing程序中java
② 规范不一样 Filter是Servlet规范中定义的 是Servlet容器支持的,而拦截器是在spring容器内,是Spring框架支持的web
③ 使用资源不一样 同其余代码块同样,拦截器也是sprring的组件,归spring管理,配置spring文件中,所以能使用Spring中任何资源,对象,例如对象,数据源,事务管理,经过IOC注入到拦截器便可:Filter则不能spring
④ 深度不一样,Filter只在Servlet先后起做用,而拦截器可以深刻到方法先后,异常抛出先后,spring架构程序,优先使用拦截器编程
详细的区别:架构
①: 拦截器是基于java的反射机制,而过滤器是基于函数回调框架
②: 拦截器不依赖servlet容器,过滤器依赖servlet容器ide
③ 拦截器只能对action请求起做用,过滤器对全部请求起做用函数
④ 拦截器能够访问action上下文,值栈里的对象,而过滤器不能post
⑤ 在action的生命周期中,拦截器能够屡次调用,而过滤器只能在容器的初始化时被调用一次
⑥拦截器能够获取IOC容器各个bean,而过滤器不能,
过滤器
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("before..."); chain.doFilter(request, response); System.out.println("after..."); }
拦截器
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion"); }
SpringMVC的机制是由同一个Servlet来分发请求给不一样Controller,其实这一步实在Servlet的service()方法中执行
原文连接 https://www.cnblogs.com/panxuejun/p/7715917.html
java中getAttribute和getParameter的区别
getAttribute表示从request范围获取属性值,必须先set设置属性,才能获取到值
getParameter表示接受参数,参数为页面提交的数据,包括表单中数据,或者url后参数