SpringMVC过滤器
来源:互联网 发布:泰州网络教育学历报名 编辑:程序博客网 时间:2024/05/24 15:37
过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet、一个Jsp页面,甚至是一个HTML页面)之前截获进入的请求,并且在它返回到客户之前截获输出请求。Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。
Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。
一.Filter接口
package javax.servlet;import java.io.IOException;public abstract interface Filter{public abstract void init(FilterConfig paramFilterConfig)throws ServletException;public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain)throws IOException, ServletException;public abstract void destroy();}
创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
1. preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如Controller实现);
返回值:true表示继续流程(如调用下一个拦截器或处理器);
false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
2. postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
3. afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
二.自定义过滤器
1.自定义过滤器,要实现Filter接口
package org.springmvc.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class MyFilter implements Filter {public void init(FilterConfig paramFilterConfig) throws ServletException {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("MyFilter.doFilter before..");chain.doFilter(request, response);System.out.println("MyFilter.doFilter after..");}public void destroy() {}}
其中chain.doFilter为过滤器链,表示执行完这个过滤器之后接着往下执行
2.在web.xml文件中配置定义的过滤器
<!-- 过滤器配置 --><filter><filter-name>myFilter</filter-name><filter-class>org.springmvc.filter.MyFilter</filter-class></filter><filter-mapping><filter-name>myFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
3.控制台打印结果
MyFilter.doFilter before..MyInterceptor.preHandleMyInterceptor.preHandle2hello worldMyInterceptor.postHandle2MyInterceptor.postHandleMyInterceptor.afterCompletion2MyInterceptor.afterCompletionMyFilter.doFilter after..
- SpringMVC过滤器
- SpringMVC过滤器
- SpringMVC过滤器
- SpringMVC过滤器
- springmvc过滤器问题
- SpringMVC过滤器:登录过滤
- springmvc 过滤器问题 ,求解!
- SpringMVC之HiddenHttpMethodFilter 过滤器
- springmvc的过滤器--Filter
- SpringMVC 过滤器HiddenHttpMethodFilter
- springMVC实现过滤器
- HiddenHttpMethodFilter过滤器—SpringMVC
- springmvc过滤器简单实例
- 在springMVC中添加过滤器
- springmvc 登录鉴权过滤器
- SpringMVC 过滤器Filter使用解析
- springMVC过滤器解决乱码问题
- SpringMVC 过滤器Filter使用解析
- Ajax--进阶(能认真的都答对了,你就真的会ajax了)
- Inverse和Cascade的比较
- 数组和链表的区别
- SSH-key 在Windows下如何生成公钥和私钥
- 视图
- SpringMVC过滤器
- Java学习之正则表达式
- 51Nod 1413 权势二进制 ( 数学
- 1020. 月饼 (25)
- String的赋值操作,intern,==等的关系
- linux中Deploying web application directory 卡住
- 集中式 vs. 分布式系统架构
- 文章标题
- java获得项目绝对路径