拦截器

拦截器概述

  • struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面的
  • struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都要执行,每次执行默认的拦截器
  • struts2里面默认的拦截器的位置这里写图片描述这里写图片描述
  • 拦截器执行时间
    • 在action对象创建之后,action的方法执行之前

拦截器原理

  • 在action方法执行之前执行默认额拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作
  • 因为有多个拦截器,执行多个拦截器的时候,这个过程需要使用责任链模式
  • aop思想
    • 面向切面(方面)编程
    • 不需要修改源代码扩展功能。
  • 责任链模式
    • 在Java中有很多的设计模式,责任链模式是其中的一种
    • 责任链模式和过滤链很相似的
    • 要执行多个操作,有三个拦截器,拦截器1执行,执行拦截器1的放行方法,执行拦截器2,执行拦截器2的放行方法,执行拦截器3,执行拦截器3的放行方法
    • 过滤链:一个请求可能被多个过滤器进行过滤,每个过滤器只有放行才能到下一个过滤器这里写图片描述

查看源代码

  • 这里写图片描述
  • 服务器启动,加载过滤器,过滤器中的init方法加载配置文件
  • 访问action,过滤器doFilter方法执行这里写图片描述
  • 创建action对象,使用动态代理方式这里写图片描述
  • 执行action的方法这里写图片描述
    • 执行很多的拦截器,遍历执行这里写图片描述
    • 类似于放行的操作这里写图片描述

过滤器和拦截器的区别

  • 过滤器:过滤器理论上可以过滤任意的内容
  • 拦截器:因为拦截器只有在action创建之后,action方法执行之前有效,只可以拦截action

Servlet和action的区别

  • Servlet 默认的请求的时候创建,只是创建一次,是单实例对象
  • action 每次访问都要创建,是多实例对象

自定义拦截器

  • 在struts2 里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际的开发中,struts2里面的拦截器中可以没有要使用的功能,这个时候就需要自定义拦截器的实现功能
  • ==拦截器结构==
    • 查看源代码看拦截器结构
    • 继承类AbstractInterceptor
    • 继承的类AbstractInterceptor实现了接口Interceport
      • 接口里面的三个方法
        • init()初始化操作
        • destroy()销毁方法
        • intercept(ActionInvocation invocation)执行拦截操作
  • 在开发中推荐使用继承MethodFilterInterceptor 类实现
    • 让action里面的某个方法不进行拦截
  • 写出来的拦截器只是有一个独立的类,为了让拦截器和action有关系,那么通过aop思想,使用配置文件建立联系

案例:使用自定义拦截器实现登录判断功能

  • 需求 :在项目中,有很多的功能,是只有登录状态才可以访问的,如果不是登录状态不能访问
    • 每个资源都进行判断很繁琐
    • 当然通过过滤器也是 可以实现的
    • 通过拦截器同样可以实现
  • 登录的 状态,使用Session域中是否有登录信息来判断
  • 过程:
    1. 登录页面:这里写图片描述
    2. action处理类:这里写图片描述
      • struts.xml对action的配置结果这里写图片描述
    3. 添加登录拦截的功能:
      • 通过判断Session域中是否有登录信息判断
      • 拦截器的实现过程
        • 创建类,继承MethodFilterInterceptor类,并且重写父类里面的 拦截方法这里写图片描述
        • ==配置拦截器和action的联系(注册拦截器)==这里写图片描述
          • 第一步:在要拦截的action标签所在的package标签里声明拦截器
          • 第二步:在具体的action标签里使用声明的拦截器
          • ==注意第三步==:struts2里面有很多的默认的拦截器,但是如果在struts2的核心配置文件中配置了自定义的拦截器,那么默认拦截将会失效,
          • ==可以通过在struts2的核心配置文件中重新配置默认拦截器的 方式实现默认拦截器的作用==
        • ==配置不拦截的方法==
          • 当自定义了一个拦截器的时候,这个拦截器会拦截所有的action方法,但是如果需要不拦截某些方法,可以在struts2的核心配置文件中的interceptor-ref标签下定义一个子标签param 来执行不拦截的方法,如果有多个方法不需要拦截,使用逗号分隔这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值