Struts2拦截器

概述

struts2里面封装了很多的功能,有很多的拦截器,但不是每次这些拦截器都执行,每次只是执行默认的拦截器。
拦截器的位置:
在这里插入图片描述
拦截器什么时候执行?
在action对象创建之后,在action里面的方法执行之前

拦截器底层原理

第一个aop思想

aop是面向切面(方面)变成,有了基本功能,如果要扩展的话,不通过修改源代码方式扩展功能。

责任链模式

在java中有很多的设计模式,责任链模式就是其中的一种。责任链模式和过滤链很相似。
责任链模式:比如要执行多个操作,有添加、修改、删除三个操作,首先执行添加操作,添加执行之后,做类似放行操作;才执行修改操作,修改操作执行完成之后做类似放行操作后才执行删除操作。
过滤器:一个请求可以有多个过滤器进行过滤,每个过滤器只有做放行才能到下一个过滤器。

aop思想和责任链模式如何应用到拦截器里面的?

拦截器在action对象创建之后,action中的方法执行之前执行;在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件进行操作,在执行拦截器的时候,执行很多的拦截器,这个过程使用责任链模式。
加入执行是哪个拦截器,执行拦截器1,执行之后做放行操作,执行拦截器2,执行之后放行,执行拦截器3,执行之后放行,才执行action中的方法。
在这里插入图片描述

重要概念

过滤器和拦截器的区别
过滤器:过滤理论上的任意内容,如HTML,jsp,servlet,图片路径等。
拦截器:拦截器只会拦截action。
servlet和action的区别
servlet默认第一次访问时创建,创建一次,单实例对象。
action每次访问都会创建,创建多次,多实例对象。

自定义拦截器

在这里插入图片描述

在开发中,建议使用另一种方式写类:继承MethodFilterInterceptor类实现,让action里面的某个方法不进行拦截。
让拦截器和action有关系,不是在action中调用拦截器的方法,而是通过配置文件方式让他们建立关系。

自定义登录拦截器(前期准备工作)

需求:在项目中,有很多action的超链接,实现只有事登录的状态,才可以点击action的超链接实现功能,如果不是登录状态,点击超链接返回到登录页面。
登录状态:使用session域对象实现
(1)登录成功之后,把数据放到session里面
(2)判断session是否有值,可以知道是否是登录状态斜体样式

A:定义登录页面,跳转到指定的action
在这里插入图片描述
B:定义登录方法
在这里插入图片描述
C:获取request对象中的用户名,并跳转到指定页面,然后将数据封装到session中
在这里插入图片描述
在这里插入图片描述
D:添加登录拦截器
(1)判断是否登录,判断session中是否有username的值
实现过程:
创建类,让他集成MethodFilterInterceptor类
重写MethodFilterInterceptor里面的方法写拦截器逻辑
在这里插入图片描述
配置action和拦截器的关系(注册拦截器)
(1)在要拦截的action标签所在的package标签里面声明拦截器
在这里插入图片描述
(2)在具体的action标签里面声明拦截器
在这里插入图片描述
(3)struts2中会执行很多默认的拦截器,如果在action里面配置了自定义的拦截器,则默认拦截器就不执行了,但是我们会用到默认拦截器中的内容。
解决方案:把默认拦截器手动使用一次。
在这里插入图片描述
配置的拦截器会对action中的所有方法都进行拦截,所以当我们执行不是我们配置的拦截器中要拦截方法时,则会被拦截器拦截
解决方案:让拦截器对这些方法不拦截。
直接通过配置的方式让action中的某些方法不进行拦截。
在这里插入图片描述
**如果是登录状态,就直接到登录成功的页面,如果不是登录状态,会跳转到登录页面,但是登录成功之后会出现问题:页面嵌套的情况 **
解决办法:页面设置打开位置,在提交数据的form表单中添加属性target(_parent:和父类对其)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值