Spring 的拦截器与Servlet的过滤器有相似之处,二者都是AOP编程思想的体现,都可以实现权限的检查,日志记录等
① 使用范围不同: Filter是Servlet规范规定,只能用在web程序中,而拦截器,除了web程序,也可以用于Application,Swing程序中
② 规范不同 Filter是Servlet规范中定义的 是Servlet容器支持的,而拦截器是在spring容器内,是Spring框架支持的
③ 使用资源不同 同其他代码块一样,拦截器也是sprring的组件,归spring管理,配置spring文件中,因此能使用Spring中任何资源,对象,例如对象,数据源,事务管理,通过IOC注入到拦截器即可:Filter则不能
④ 深度不同,Filter只在Servlet前后起作用,而拦截器能够深入到方法前后,异常抛出前后,spring架构程序,优先使用拦截器
详细的区别:
①: 拦截器是基于java的反射机制,而过滤器是基于函数回调
②: 拦截器不依赖servlet容器,过滤器依赖servlet容器
③ 拦截器只能对action请求起作用,过滤器对所有请求起作用
④ 拦截器可以访问action上下文,值栈里的对象,而过滤器不能
⑤ 在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后参数