过滤器和监听器
过滤器
什么是过滤器
一种可以拦截请求和响应,并且可以做出一些修改或判断功能的可插拔组件。
如何编写过滤器
- 编写一个实现Filter接口的类
- 注册过滤器
/**
* 在容器启动时,容器会立即创建Filter的实例,
* 创建实例后,会把已经准备好的FilterConfig对象传给init方法
* 只调用一次init方法
*
* 通过FilterConfig可以获取到配置文件中有关过滤器的一些初始化参数
*/
public void init(FilterConfig config) throws ServletException {}
/**
* doFilter用于设置过滤的具体逻辑
* 该方法有三个参数:
* request: 拦截请求时截获的请求对象,即request对象
* response: 与拦截的请求对应的响应对象,即response对象
* chain: 过滤器链对象(FilterChain),该对象可以决定请求传给后序的servlet还是直接提供响应
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {}
/**
* 当容器销毁过滤器实例时调用的方法,只调用一次
*/
public void destroy() {}
过滤器的优先级
当存在多个过滤器时,执行过滤器的顺序以Filter-mapping的顺序为准
过滤器初始化参数
在注册过滤器节点中,添加< init-param>节点来设置初始化参数,在过滤器中使用FilterConfig对象就可以获取配置的初始化参数值
当请求执行结束后,响应在回到客户端以前,还需要再执行一遍过滤器,执行所有doFilter()方法后面的代码段.如果有多个过滤器时,后面的过滤器先执行
获取servletContext的四种方法
Servlet–>GenericSerlvet–>HttpServlet
1. GenericServlet对象的 getServletContext()
2. HttpSession 对象的 getServletContext()
3. ServletCongfig 对象的 getServletContext()
4. FilterConfig 对象的 getServletSontext()