过滤器:可以拦截任何请求和相应(任何资源,静态或servlet资源)
拦截器:只能拦截Action资源(拦截器是Struts2特有的概念)
作用:两者的作用都是一样的,拦截请求和相应
过滤器概述:
- 什么是过滤器?过滤器就是一个接口javax.servlet.Filter
- servlet技术的三个组件:
- javax.servlet.Servlet接口:用于处理请求和响应
- javax.servlet.Filter接口: 过滤器
- javax.servlet.XXXListener接口: 监听器
- 以上组件共同的特点:
- web应用的组件
- 需要web服务器(比如Tomcat)运行
- 需要在web应用的web.xml文件配置
- 过滤器开发步骤
- 编写一个java类,实现javax.servlet.Filter接口
- 在项目的web.xml文件中进行配置
- 访问目标资源(而不是访问过滤器)
- 过滤器生命周期
- 构造方法: 创建对象时调用(过滤器是单例的)
- init: 初始化方法,创建完过滤器对象之后调用
- doFilter: 每次发出请求目标资源时
- destroy:销毁过滤器对象时调用
- 过滤器链(FilterChain)
- 概念: 一个目标资源同时被多个过滤器所过滤,则形成一个过滤器链
- 过滤器链的优先级问题:是由<filter-mapping>的顺序决定的,先配置的先执行!!
拦截器概述:
- 作用:在访问Action之前或者之后执行拦截任务
- 开发步骤
- 编写类,实现Interceptor接口
- 在struts.xml文件中给Action配置拦截器
- 编写类,实现Interceptor接口
- 拦截器栈
- 概念:希望一个Action被多个拦截器所拦截,就要使用拦截器栈进行拦截
- 配置