Struts2学习笔记(九) 拦截器(Interceptor)(下)

拦截器的查找顺序

如果我们在多个地方配置了拦截器,那么框架会按什么样的顺序进行查找呢:

(1)首先查找当前Action是否声明了拦截器,如果有则使用这个拦截器,不再继续寻找,如果没有,则执行下一步

(2)其次,查找当前Action所在的包中是否声明了默认的拦截器引用,即看<package>元素下有没有<default-intercptor-ref>元素,如果有就使用它,不再继续寻找。如果没有,则执行下一步

(3)最后,递归寻找Action所在包的父包中是否设置了默认拦截器引用,直到找到为止。

注:这里的三步是覆盖的关系,即执行了(2),那么(2)(3)就不会执行了。自顶向下的优先级。一般情况下,如果我们没有在strtus.xml中对Action进行拦截器引用配置,但是我们的包继承了strtus-default包,那么就会使用定义在strtus-default包中的defaultStack拦截器栈。至于没有拦截器的情况,应该是不存在的,如果不使用拦截器,那么就失去了使用Strtus的意义了。

自定义拦截器

虽然实际使用中struts2提供的拦截器已经基本够我们使用了,一般不需要我们自己写拦截器。但是为了更加深刻的理解拦截器的实现机制。我们还是自己动手写一个自定义的拦截器。要想自定义拦截器,我们只需要实现com.opensymphony.xwork2.interceptor.Interceptor接口即可。这个接口中定义了三个方法,init方法会在对象初始化时被调用,可以用来获取一些资源;destory方法类似与c++中的析构函数(这样便于理解,实际还是有差别的);真正实拦截器功能的是interceptor方法,我们自定拦截器主要就是实现这个方法。下面我们以判断用户是否登录为例来写一个自定义拦截器:

public class MyInterceptor implements Interceptor {

	public void destroy() {
	}

	public void init() {
	}

	public String intercept(ActionInvocation invocation) throws Exception {

		System.out.println("动作执行之前...");
		String result = invocation.invoke();
		System.out.println("结果执行之后...");
		
		return result;
	}

}

Struts.xml

<package name="default" namespace="/" extends="struts-default">

<interceptors>

<interceptor name="myinterceptor"class="interceptor.MyInterceptor" />

<interceptor-stack name="myStack">

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="myinterceptor"></interceptor-ref>

</interceptor-stack>

</interceptors>

<default-interceptor-ref name="myStack"></default-interceptor-ref>

<action name="hello" class="action.HelloWorld">

<result name="success">/hello.jsp</result>

</action>

</package>

Hello.jsp

<body>

<%

System.out.println("结果已执行...");

%>

This is hello.jsp. <br>

</body>

在浏览器中访问hello动作,hello.jsp页面呈现之后,查看控制台输出如下:

动作执行之前...

结果已执行...

结果执行之后...

由此可见,我们自定义的interceptor已经在动作执行之前和结果执行之后都被执行了。当然,如果你想在结果被执行之前做点什么,那就需要使用前面学到的PreResultListenner来实现了。

总结:关于拦截器的学习,差不多就到这里了。拦截器的配置和使用本身不难,主要是理解拦截器的实现原理。到现在差不多就把Struts2中的几个基本的概念学完了,接下来就该学习OGNL和类型转换以及输入验证了。以前自学都只是看看书或者教程,没怎么做过笔记,现在发现其实在写笔记的过程中,会加深对所学只是的理解,有些你看书或教程没理解到的地方,在你边写笔记边做实例的过程中就理解的很清楚了。看来以后学习的时候尽量写一些笔记来加深自己的理解,记不清的时候还可以拿出来看看。


CANape快速上手 文章帮助记录CANape学习过程。 阅读详情

相关推荐

用74LS190和555定时器复刻经典交通灯:一个电子工程新手的实战避坑记录

本文记录了使用74LS190和555定时器复刻经典交通灯的实战过程,详细介绍了元件选型、电路搭建与调试的关键步骤。特别分享了555定时器参数设置、74LS190级联技巧以及状态机设计的避坑经验,为电子工程新手提供实用参考。

weixin_42629671的博客 306

MybatisInterceptor使用详解

MybatisInterceptor对需要执行的sql前进行数据处理,例如: 新增时自动添加创建人,创建时间; 更新时自动添加更新人,更新时间。 拦截器原理介绍参考下述大佬博客: Mybatis拦截器介绍 mybatis 源码分析(五)Interceptor 详解 以下对拦截器debug,查看使用过程。 新增操作 ...

weixin_43811057的博客 3011

Zabbix-获取客户端的SNMP数据

网口状态(ifOperStatus)的 OID 是1.3.6.1.2.1.2.2.1.8,查询时需要用1.3.6.1.2.1.2.2.1.8.1(第 1 个网口)、1.3.6.1.2.1.2.2.1.8.2(第 2 个网口)等。表格对象是指 “包含多个同类实例的对象”(如设备的多个网口、多个进程等,每个实例需要单独标识)。在 SNMP 规范中,标量对象的完整 OID 必须以.0结尾,.0是标量对象的唯一实例编号。标量对象是指 “单一值的对象”(如设备的名称、温度、状态等,整个设备只需要一个值来表示)。

徐子元 1725

java intercpt_Struts 2拦截器(Intercept)总结

什么是Struts2拦截器?从软件构架上来说,拦截器是实现了面向方面编程的组件。它将影响了多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现功能的高度内聚,确保了业务对象的整洁和纯度。从Java代码上来说,它就是一个普度的Java对象,它只需要实现一个名为Interceptor的接口。为什么要使用拦截器?拦截器消除了动作组件中的横切任务(cross-cutting tas...

weixin_42502295的博客 609

卷王问卷考试系统——测试报告

本问卷考试系统是一款在线平台,支持用户发布和完成调查问卷,并进行考试管理,核心功能在于简化问卷创建发布、数据收集及考试组织流程。此次测试将围绕其关键模块展开,涵盖用户注册登录、项目列表、我的练习以及我的题库等核心部分。问卷考试系统(一)硬件环境普通办公电脑(CPU:Intel i5 、内存:16GB 、硬盘:512GB )(二)软件环境操作系统:Windows 11 ;浏览器:Chrome(版本 120+)、Firefox(版本 115+)、Edge(版本 120+)验证界面信息在完整性、一致性、准确性和用

m0_73433755的博客 552

【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流程详解,注释详细,简单修改就可以训练你自己的图像数据,有训练好的模型下载地址,随取随用

【图像超分】论文精读:Image Super-Resolution Using Deep Convolutional Networks(SRCNN)请配合上述论文精读文章使用,效果更佳!图像超分辨率SRCNN和FSRCNN复现代码,除基本的网络实现外,还有特征图可视化,PSNR曲线图可视化,测试自己的图像数据等不想理解原理,希望直接跑通然后应用到自己的图像数据的同学,请直接下载上面的代码,有训练好的模型,直接用即可。具体使用方式见代码中的README!有问题来本文评论区留言!准备数据集,以及数据预处理。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 2万+

Java中自定义interceptor拦截器

interceptor拦截器自定义拦截器 首先需要在xml中配置struts2核心过滤器 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

SuPrEeMm的博客 2472

linux那些事之numa balance

numa balance numa balance是页迁移技术最重要也是最开始使用应用的技术,主要是为解决由于调度器进程在两个node迁移造成访问内存性能问题。 numba balance通过页迁移技术,将不在运行节点的内存迁移到所运行的节点上。对应numa balance要注意几点: 防止进程在两个节点之前来回切换造成频繁进行页迁移(ping pang现场)从而影响性能。numa balance本身就是为了提高性能,不能因为造成频繁页迁移而对性能进行一个反向优化。 多个线程分布在不同线程 访.

weixin_42730667的博客 3906

SpringBoot 拦截器Interceptor

1. 编写自定义拦截器 编写自定义拦截器 实现HandlerInterceptor接口 重写接口方法preHandle、postHandle、afterCompletion 如: public class CustomInterceptor implements HandlerInterceptor { private static final ObjectMapper mapper = new ObjectMapper(); public CustomInterceptor()

wguo-up-site 671

车载软件架构 —— AUTOSAR Vector SIP包(三)

### 上一篇文章中介绍了AUTOSAR基础软件供应商Vector公司的开发工具链,本文将继续介绍Vector公司的AUTOSAR产品。 ### -> 1、Vector SIP包中的StartApplication ### -> 2、StartApplication如何开始使用

Soly_kun的博客 827

Java/PHP:微信支付v3显示 “商户证书序列号有误。请使用签名私钥匹配的证书序列号。“(Spring Boot、thinkPHP微信支付失败返回错误,例如退款、企业付款到零钱等各种微信支付业务)

商户证书序列号有误。请使用签名私钥匹配的证书序列号,php,Java微信支付v3显示"商户证书序列号有误。请使用签名私钥匹配的证书序列号。"请问如何解决?httResponseBody[{"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"}]微信V3支付报错 平台证书及平台证书序列,vue3微信支付报错,Uniapp支付报错,微信支付签名错误解决方法,微信支付v3证书报错,微信支付平台证书过期(报错:证书序列号错误)计算签名时,商户号、商户AP

✅ 精选推荐文章 4597

Struts2拦截器Interceptor创建与配置

一、Interceptor类创建这里有一点需要注意:如果放行了,就不会再执行最后return的结果了,参考论坛讨论:https://bbs.youkuaiyun.com/topics/370194837 12楼的回答:楼上是正解,这是struts2的机制,只要调用 invoke()方法后,如果能成功的调用了对应Action类中的方法,strtus2就会按照该方法的返回值去找对应的result,从而忽略拦截器的...

javae100的博客 4152

电容式三点式振荡电路/电感式三点振荡电路基础知识及Multisim电路仿真

摘要:三极管振荡电路利用放大特性与正反馈实现自激振荡,需满足巴克豪森条件(增益≥1,相位匹配)。核心由放大级、反馈网络、选频网络和稳幅环节构成。主要分为三类:1)LC/RC正弦波振荡电路(如电容三点式、电感三点式),输出高频/低频正弦波;2)多谐振荡电路,通过电容充放电产生方波;3)张弛振荡电路,生成锯齿波等。设计需关注相位匹配、增益控制和元件适配。LC振荡频率由谐振参数决定,RC振荡由时间常数控制。稳幅机制通过非线性或主动元件维持等幅输出。该电路在信号发生、时钟源等领域有广泛应用。

XU157303764的博客 2035

struts2拦截器interceptor的三种配置方法

1、struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 package name="struts2" extends="struts-default"> class="edu.hust.action.RegisterAction">

Golden_lion的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

5.Struts 2拦截器(Interceptor)

任何优秀的MVC框架都会提供一些通用的操作,如请求数据的封装、类型转换、数据校验、解析上传的文件、防止表单的多次提交等。 Struts 2将它的核心功能放到拦截器中实现而不是集中在核心控制器中实现,把大部分控制器需要完成的工作按功能分开定义,每个拦截器完成一个功能,而完成这些功能的拦截器可以自由选择、灵活组合,需要哪些只需要在struts.xml指定即可,从而增加了框架的灵活性,有利于系统解耦。 拦截器的方法在Action执行之前或者执行之后自动的执行,从而将通用的操作动态地插入到了可插拔式。

相互学习 共同进步 1038

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Struts2 的核心——拦截器[Interceptor]

详细介绍了 Struts2中拦截器的执行原理、什么是拦截器、拦截器的配置和使用。

乐乐的专栏 3171

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

浅谈Struts2拦截器Interceptor的设计原理

使用过struts2框架的朋友们都知道 拦截器Interceptor 在struts2中的地位是非常重要的,可以说是struts2在控制流调度部分的核心,并且struts2做为一个MVC框架,之所以在 controller层有如此强大的扩展能力,完全是由其拦截器的设计决定的,我们先看看下面这张图:

FcBayernMunchen的专栏 4962

Struts2学习笔记(八) 拦截器(Interceptor)(上)

什么是拦截器(Interceptor) 拦截器是struts2框架最重要的特性之一。它可以让你在Action 方法执行前后(Result执行之后)进行一些功能处理。在前面学习Action和学习Result的时候我们就已经开始学习拦截器了,因此现在我们对如何使用它已经不陌生了。 在学习Spring的时候我们会接触到一种设计思想,叫做面向切面编程(AOP)。也就是说我们将一些通用的功能组件抽取出来

心静欣 7906

struts2 拦截器Interceptor

想拦截某个action中的方法,判断有没有登陆,没有登陆就拦截。以前不太会用,用的是过滤器。 现在总结一下拦截器: 1:写拦截器类 public class AuthorizationInterceptor extends MethodFilterInterceptor{ private static final long serialVersionUID = 1L; prot

mingming_vip的专栏 1503

Struts2中的Interceptor拦截器

1.Interceptor简介        struts2中的interceptor它是基于spring aop思想,而aop思想它本质上是通过动态代理来实现,strtus2的拦截器它主要是拦截Action的操作,在action的执行前或执行后进行一些其它的功能操作. 多个拦截器可以形成一个拦截器链,在访问它们时依次访问.2.自定义Interceptor    (1)定义Interceptor ...

sinat_42576042的博客 1295

struts2 拦截器 interceptor

downpour 写道 拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。正如上面 Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦截器的代码。 接下来,我们将重点讨论一下Struts2中的拦截器的

zsm653983的专栏 1004

Struts2拦截器Interceptor的使用

一、拦截器的使用: 只有用户登录时才可以查看商品,否则点击查看商品时会跳回login登录页面。 struts2.xml中拦截器Interceptor的配置: <interceptors> <!-- 声明自定义的拦截器 --> <interceptor name="myInterceptor" class="Interceptor.MyInterceptor...

BullZeng的博客 1096

struts2 Interceptor怎么写

interceptor是struts2的核心。我们也可以定义自己的interceptor。 jdk代理模式是基于AOP的,struts2的interceptor也是基于AOP的。所以我们可以把interceptor理解为struts2对动态代理的一种封装,与手工实现jdk的动态代理相比,这种封装使得操作变得更为简单。 1. implements Interceptor的自定义inter

u010395804的专栏 1109

Struts2 拦截器(Interceptor )原理和配置

一、Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的    拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器。 比如:应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑

voins的博客 5703
上一篇: Struts2学习笔记(八) 拦截器(Interceptor)(上)
下一篇: Struts2学习笔记(九) 拦截器(Interceptor)(下)
jdluojing
博客等级 码龄17年 79粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值