1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > javaweb(11) Listener监听器与Filter过滤器

javaweb(11) Listener监听器与Filter过滤器

时间:2024-04-02 12:51:25

相关推荐

javaweb(11) Listener监听器与Filter过滤器

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的拦截路径

精确匹配

目录匹配

后缀名匹配

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。