Struts2_day04(一)之拦截器

一、拦截器概述

1.Struts2是一个框架,Struts2里面封装的功能都放在拦截器里面

2.Struts2里面封装了很多的功能——很多拦截器,但这些拦截器不是每次都执行的,每次执行的是默认的拦截器。

3.Struts2里面默认拦截器的位置

4.拦截器在什么时候执行?

  • 拦截器在action对象创建之后,action的方法执行之前进行执行

二、拦截器底层原理(2个)

(1)aop思想:面向切面(方面)编程。有基本功能,想扩展功能,但不通过修改源代码方式扩展功能;

后面再spring里把安排做更深层次的分析。

(2)责任链模式

(1)在Java中有很多的设计模式,责任链模式是其中的一种;

(2)责任链模式和过滤链很相似的

过滤链:一个请求可以有多个过滤器进行过滤,每个过滤器只有进行放行操作才能到后面的过滤器;

责任链模式:要执行多个操作,有添加、修改、删除三个操作。

首先执行添加操作,添加操作执行之后做类似于放行的操作——>执行修改操作,修改操作执行之后做类似放行的操作——>执行删除操作。

 

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

(1)文字描述:拦截器在action对象创建之后,action的方法执行之前执行

——在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作。

——在执行拦截器的时候,执行很多的拦截器,这个过程使用责任链模式;

——加入执行三个拦截器,执行拦截器1,执行完之后放行——>执行拦截器2,执行完后放行——>执行拦截器3,完成之后放行—>执行action方法。

(2)画图分析:

3.查看源代码

(1)执行action

(2)创建action对象,使用动态代理方式

(3)执行action的方法

(4)执行很多的拦截器,遍历执行

类似于放行的操作方法:

三、重要的概念

1.过滤器和拦截器区别

(1)过滤器:理论上可以过滤任意内容,比如HTML、jsp、servlet、图片路径等;

(2)拦截器:拦截器只拦截action

2.Servlet和action的区别

(1)servlet默认第一次访问时创建,创建一次——单实例对象

(2)action每次访问时都创建,创建多次——多实例对象

四、自定义拦截器

1.在Struts2里面有很多的拦截器,这些拦截器是Struts2封装的功能,但是在实际开发中,Struts2里面的拦截器中可能没有我们要使用的功能,这个时候需要自己写拦截器实现功能。

2.拦截器结构

(1)查看源代码看拦截器结构:

继承类:

在接口里面有三个方法:初始化、销毁、拦截

(2)在开发中,建议使用:

——写类,并继承MethodFilterInterceptor类来实现自定义构造拦截器

——让action里面某个的方法不进行拦截

(3)让拦截器和action有关系

——不在action里面调用拦截器的方法,而是通过配置文件的方式来建立关系

案例:自定义登录拦截器

(1)需求:在项目中,有很多的action的超链接,实现只有是登录的状态,才可以点击action的超链接实现功能,如果不是登录状态,点击action超链接返回到登录页面

(2)登录的状态:使用session域对象实现

——登录成功之后,把数据放到session里面

——判断session是否有值,可以知道是否是登录状态

(3)实现登录的基本功能

——查询数据库判断用户名和密码

(4)添加登录拦截器功能

——判断是否登录:判断session里面是否有名称是username的值

——拦截器的实现过程:

第一步:创建类,集成MethodFilterInterceptor类

第二步:重写MethodFilterInterceptor类里面的方法,写拦截器逻辑

第三步:配置action和拦截器关系(注册拦截器)

——在要拦截器的action标签所在的package标签里面声明拦截器

——在具体的action标签里面使用声明的拦截器

——Struts2里面执行很多的默认拦截器,但是如果action里面配置自定义拦截器

问题:默认的拦截器不会执行了?——解决:把默认拦截器手动使用一次

上述三个:

(5)配置拦截器,对action里面所有的方法都进行拦截

——在action里面有login的登录方法,这个方法不需要拦截,如果这个方法都拦截,问题是,永远登录不进去了。

——解决:让login方法不进行拦截;直接通过配置的方式让action里面某些方法不被拦截

(6)<form  target="_parent"> :设置打开的位置

待续。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值