javaweb(11) Listener监听器与Filter过滤器
Listener监听器
什么是Listener监听器
Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器Listener 它是 JavaEE 的规范,就是接口监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。ServletContextListener监听器
ServletContextListener 它可以监听 ServletContext 对象的创建和销毁。
ServletContext 对象在 web 工程启动的时候创建,在 web 工程停止的时候销毁。
监听到创建和销毁之后都会分别调用 ServletContextListener 监听器的方法反馈。
两个方法:
public void contextInitialized(ServletContextEvent sce);public void contextDestroyed(ServletContextEvent sce);
如何使用ServletContextListener监听器监听ServletContext对象:
编写一个类去实现 ServletContextListener实现其两个回调方法到 web.xml 中去配置监听器
监听器实现类:
web.xml中的配置:
Filter过滤器
基本介绍
Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器Filter 过滤器它是 JavaEE 的规范。也就是接口Filter 过滤器它的作用是:拦截请求,过滤响应。拦截请求的常见场景有:
权限检查日记操作事务管理等
Filter的基本使用
要求:在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、等等)都必须是用户登录之后才允许访问。具体步骤示例
创建一个类去实现filter接口,重写doFilter方法
public class AdminFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//专门用于拦截请求,过滤响应//权限检查HttpServletRequest request = (HttpServletRequest) servletRequest;Object username = request.getSession().getAttribute("username");if (username == null){servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);}else {//让程序继续访问要访问的资源filterChain.doFilter(servletRequest, servletResponse);}}}
配置web.xml文件
<!--filter标签用于配置一个filter过滤器--><filter><!--给filter起一个别名--><filter-name>AdminFilter</filter-name><!--配置filter的全类名--><filter-class>com.deserts.filter.AdminFilter</filter-class></filter><!--配置filter的拦截路径--><filter-mapping><!--表示该拦截路径给哪个filter类使用--><filter-name>AdminFilter</filter-name><!--配置拦截路径--><url-pattern>/admin/*</url-pattern></filter-mapping>
完整流程描述
当用户要访问过滤器filter所配置的资源路径时,会先经过实现了Filter接口的类AdminFilter,然后执行Filter进检查权限,如果用户名为空,转发到用户登录的页面;如果已登录,执行filterChain.doFilter(servletRequest, servletResponse);继续访问Filter的生命周期
FilterConfig类
作用
获取 Filter 的名称 filter-name 的内容获取在 Filter 中配置的 init-param 初始化参数获取 ServletContext 对象示例
FilterChain过滤链
在上述权限检查的过程中,当用户已登录,执行filterChain.doFilter(servletRequest, servletResponse)时,若有其它的Filter实现类同样配置了路径去拦截该资源,会继续执行下一个Filter类,多个Filter类都配置了要访问的资源路径时,执行顺序由web.xml从上到下的执行顺序决定。 FilterChain.doFilter()方法的作用: 执行下一个filter过滤器(如果有)执行目标资源(如果没有下一个过滤器) 多个Filter执行的特点 所有filter和目标资源默认都执行在同一个线程中多个filter共同执行的时候,它们都使用同一个filter对象Filter的拦截路径
精确匹配
目录匹配
后缀名匹配