zoukankan      html  css  js  c++  java
  • JavaWeb三大组件之 Filter&Listener

    Servlet Filter Listener是JavaWeb的三大组件。

    Filter

    Servlet Filter Listener是JavaWeb的三大组件。

    过滤器一般用于完成通用的操作,如:登录验证、统一编码、敏感字符过滤等

    过滤器执行流程:

    • 客户端请求资源-》对request过滤-》访问资源-》对response过滤-》返给客户端。

    快速入门

    和定义一个servlet相似:

    1. 定义一个类,实现接口Filter
    2. 重写方法
    3. 配置拦截路径 @WebFilter("/*") (对所有路径过滤)
    4. 放行所有内容:doFilter方法中代码如下:
      • filterChain.doFilter(servletRequest, servletResponse);

    过滤器配置

    拦截路径配置:

    • 具体资源路径:@WebFilter(/index.jsp)
    • 目录拦截:@WebFilter(/user/*)
    • 后缀名拦截:@WebFilter(*.jsp)
    • 拦截所有资源:@WebFilter(/*)

    拦截方式配置:(设置dispatcherTypes属性)

    • REQUEST: 默认值,浏览器直接请求资源时,拦截过滤
    • FORWARD: 转发访问资源时,拦截过滤
    • INCLUDE: 包含访问资源(不讲)
    • ERROR: 错误跳转资源(不讲)
    • ASYNC: 异步访问资源 (先不讲,涉及到Ajax)

    还可以拦截多个请求方式:

    @WebFilter(value="/*",dispatcherTypes={DispatcherTypes.REQUEST, DispatcherTypes.FORWARD})
    

    过滤器链

    如果有多个过滤器,访问资源前,按顺序过滤;访问资源后,按相反顺序过滤。

    过滤顺序可以进行配置:

    1. 注解配置方式:按照类名的字符串比较,值小的先执行
    2. web.xml配置方式
      • <filter-mapping></filter-mapping> 谁定义在上面,谁先执行

    例1:登录

    如果用户登录,直接放行;如果没有,跳转到登录页面。

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 转成HttpServlet
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        // 获取资源请求路径
        String uri = req.getRequestURI();
        // 判断是否包含登陆相关资源:js,css,图片等
        if (uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/")
        || uri.contains("/js/") || uri.contains("/fonts/")) {
            // 如果正在登陆,直接放行
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            // 访问的是非登陆资源,判断是否已经登陆
            Object user = req.getSession().getAttribute("user");
            if (user != null) {
                // 已经登陆, 直接放行
                filterChain.doFilter(servletRequest, servletResponse);
            } else {
                req.setAttribute("login_msg", "请先登陆");
                req.getRequestDispatcher("/login.jsp").forward(servletRequest, servletResponse);
            }
        }
    }
    

    Listener

    (理论了解即可)

    Servlet Filter Listener是JavaWeb的三大组件。

    事件监听机制:

    • 事件:一件事情(如:单击、双击)
    • 事件源:事件发生的地方(如:按钮、鼠标、键盘)
    • 监听器:一个对象
    • 注册监听:将事件、事件源、监听器绑定在一起。

    JavaWeb中有很多监听器对象,学习其中一个:ServletContextListener

    ServletContextListener:监听ServletContext对象的创建和销毁

    • void contextDestroyed: ServletContextListener对象被销毁前调用该方法
    • void contextInitialized: ServletContextListener对象被创建后调用该方法

    实现步骤:

    1. 定义一个类,继承ServletContextListener类;
    2. 重写上面的两个方法;(如,创建对象后,加载项目全局的配置文件)
    3. 添加注解 @WebListener
  • 相关阅读:
    数学系列:数学在计算机图形学中的应用
    数学系列:数学体系概览
    Math: Fibonacci
    算法系列:电磁频谱划分
    计算机系列:CUDA 深入研究
    算法系列:寻找最大的 K 个数
    算法系列:000
    算法系列:三元组和
    算法系列:单链表逆序
    堆栈区别
  • 原文地址:https://www.cnblogs.com/mingriyingying/p/13508515.html
Copyright © 2011-2022 走看看