javaweb-Filter
Filter过滤器
Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能,统一字符集编码。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
如何借助Filter实现拦截功能?
Servlet API提供了一个Filter接口,编写的过滤器必须实现该接口。Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,Web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到过滤的目的.
Filter开发两步走
①编写java类实现java.servlet.Filter接口,并实现其doFilter方法。
public class DemoFilter implements Filter{@Overridepublic void destroy() {System.out.println("destroy");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {System.out.println("doFilter");}@Overridepublic void init(FilterConfig config) throws ServletException {System.out.println("init");}}
②在web.xml文件中对编写的filter类进行注册,并设置它所能拦截的资源。
</welcome-file-list><!-- 配置Servlet,但现在我不在这里配,可以用注解的方式在控制类中配 --><!-- 配置过滤器, --><filter><filter-name>DemoFilter</filter-name><filter-class>cn.xsw.mvcproject.filter.DemoFilter</filter-class></filter><filter-mapping><filter-name>DemoFilter</filter-name><url-pattern>/*</url-pattern> <!--拦截项目的所有资源--><dispatcher>REQUEST</dispatcher> <!-- 指定拦截的请求,默认request,还有- FORWARD- INCLUDE- ASYNC- ERROR --></filter-mapping>
</web-app>
测试:因为过滤(拦截)了所有资源,所以我启动服务器,打开登录页面(或其它页面)都显示空白,说明拦截了
每刷新一下网页,或打开另一个网页,就会输出一次doFilter,说明该方法会执行n多次,拦截功能是由doFilter()方法来做。
放行拦截的所有资源
@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException {chain.doFilter(req, resp);}