Struts2中为什么要使用拦截器?拦截器的使用原理以及如何配置拦截器。

Struts2 中拦截器的工作原理及其执行顺序 【代码】Struts2 中拦截器的工作原理及其执行顺序。 阅读详情

一、什么是拦截器? 提到拦截器,使我不得不想起武侠剧中劫匪们常说的一句话:“此山是我开,此树是我栽,要打此路过,留下买路财!”。难不成程序中也有“打劫”的,说的没错,拦截器就是个打劫的。在现实生活中,劫匪劫的大都是钱财,当然也有别的什么,那么程序中的“劫匪”劫的又是什么呢?或者说程序中为什么需要它?在我们的日常编程中少不了写一些重复的代码,例如在一个地方中写了一段代码,后来发现这段代码在其它地方中同样需要,在传统的编程中我们一定会采取复制、粘贴的办法。如果这段代码只在这一两个处需要,我们采取这种办法,还说的过去,但是如果系统对这段代码过于依赖,也就是这段代码在系统中出现的过多,如果那一天我们发现这段代码中在某些地方还需要完善,我们是不是要着个修改它们呢?我估计没有人会这么做,它严重违反了软件开发中一条非常重要的DRY规则,不写重复代码。说了这么多你一定知道我们为什么需要在程序中弄一个“劫匪”了吧。这个“劫匪”就是并不是劫取什么东西,只是为了在某个程序执行前后,动态的增加一些功能(以前所写通用代码块)或进行一些检查工作。那么这个拦截器到底是怎么实现的呢?实际上它是用Java中的动态代理来实现的,具体可以参考《设计模式学习笔记(十六)—Proxy模式》。

 二、拦截器在Struts2中的应用 对于Struts2框架而言,正是大量的内置拦截器完成了大部分操作。像params拦截器将http请求中参数解析出来赋值给Action中对应的属性。Servlet-config拦截器负责把请求中HttpServletRequest实例和HttpServletResponse实例传递给Action……struts2内置的拦截器有很多,在此我就不一一列举了,具体可以参考《Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解》。

那么怎么在struts2中定义自己的拦截器呢? 很简单Struts2为我们提供了一个Interceptor接口,该接口源代码如下:

 publicinterface Interceptor extends Serializable {

         void destroy();

         void init();

        String intercept(ActionInvocation invocation) throws Exception;

}

1) init():在拦截器执行之前调用,主要用于初始化系统资源。

 2) destroty():与init()对应,用于拦截器执行之后销毁资源。

 3) intercept():拦截器的核心方法,实现具体的拦截操作。与action一样,该方法也返回一个字符串作为逻辑视图。如果拦截器成功调用了action,则返回一个真正的,也就是该action中execute()方法返回的逻辑视图,反之,则返回一个自定义的逻辑视图。 通常我们使用拦截器并不需要申请资源,为此Struts2还为我们提供了一个AbstractInterceptor类,该类的init()和destroy()都是空实现。我们开发自己的拦截器只需要继承这个类就行了。

 下面创建一个判断用户是否登录的拦截器。代码如下: struts.xml中配置一下。

 /** *//** * *

@author flustar *

 @version 1.0 * Creation date: Feb 12, 2008 5:05:28 PM

 */

import java.util.Map;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionInvocation;

 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

 @SuppressWarnings("serial") public class CheckLoginInterceptor extends AbstractInterceptor {

      @SuppressWarnings("unchecked")

       public String intercept(ActionInvocation actionInvocation) throws Exception {

                  System.out.println("begin check login interceptor!");

                  // 检查Session中是否存在user

                 Map session = actionInvocation.getInvocationContext().getSession();

                String username = (String) session.get("user");

                 if (username != null && username.length() > 0) {

                              // 存在的情况下进行后续操作。

                              System.out.println("already login!");

                              return actionInvocation.invoke(); }

                               else { 

                                            // 否则终止后续操作,返回LOGIN System.out.println("no login, forward login page!"); return Action.LOGIN;

                                }

                   }

        }

             创建好拦截器后,还不能使用,还需要我们在 下面看一下怎么配置拦截器。 这个定义好的拦截器在Action中怎么使用呢?使用方法很简单,如下: 一旦我们为某个action引用了自定义的拦截器,struts2默认的拦截器就不会再起作用,因此还需要引用默认拦截器。 但是我们这么做似乎也不太方便,因为如果拦截器checkLogin需要被多个action引用的话,每一个都要配置一遍太麻烦了。我们可以把它定义成默认的拦截器。 <!—-定义一个拦截器栈--> 另外,struts2还为我们提供了一个方法过滤的拦截器MethodFilterInterceptor类,该类继承AbstractInterceptor类,重写了intercept(ActionInvocation invocation)并提供了一个新的方法doInterceptor(ActionInvocation invocation)抽象方法。该类的使用方法很简单,就不举例了。这个拦截器与以往的拦截器配置有所不同。那就是可以指定哪些方法需要被拦截,那些不需要。通常在引用该拦截器时指定。 exculdeMethods:是不被拦截的方法,如果有多个以逗号分隔。

includeMethods:需要被拦截的方法,如果有多个以逗号分隔。

Struts2工作原理及代码 【代码】Struts2工作原理及代码。 阅读详情

相关推荐

NBIS单细胞教程:差异基因(五)

此文章是通过学习瑞典国家生物信息学基础设施(NBIS) 所开放的单细胞分析教程加上网上所查找的资料,自身的理解所形成的,可能会有不足之处。该部分是对不同集群之间的差异基因进行分析。参考来源:https://github.com/NBISweden/workshop-scRNAseq/blob/master/labs/seurat/seurat_05_dge.Rmd感兴趣的话可以阅读原文。

songyi10的博客 1万+

什么是拦截器?拦截器如何配置?

Spring 中拦截器(Interceptor)详解,什么是拦截器,拦截器如何定义和使用?

qq_64656621的博客 4298

菲涅尔波带片

菲涅尔波带片的简介,以及matlab绘制

Bestchinese的博客 1万+

为什么使用拦截器以及定义

1、为什么使用拦截器? 虽然OOP和结构化编程相比具有很多的优势,但是在企业级的开发中仍然是力不从心。例如,事务处理、异常处理、日志、数据校验、国际化及权限管理等方面的代码都是技术实现代码,这些代码和业务处理逻辑代码都混在一起,会使项目中产生大量的重复代码。 通过使用拦截器,可以使代码可读性增强,同时有利于维护 2、什么是拦截器? 拦截器是Strut2框架的核心内容之一,它的作用是在调用A

踏雁寻花 1666

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 635

电子数据取证实战:从“平航杯”竞赛看计算机检材分析的关键技术与案例解析

本文通过'平航杯'电子数据取证竞赛案例,深入解析计算机检材分析的关键技术,包括USB设备追踪、浏览器历史分析、AI换脸取证、虚拟货币交易追踪等实战技巧。重点探讨了数字痕迹的发现与关联,以及电子取证工具链的应用,为从业人员提供实用的技术参考和案例分析。

www00的博客 537

拦截器(interceptor)

Spring MVC中的拦截器(Interceptor)类似于ServLet中的过滤器(Filter),它主要用于拦截用户请求并作出相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。定义:拦截器是一种动态拦截方法调用的机制,在SpringMVC中动态拦截controller方法的执行;tomcat所有请求资源中分为静态资源和动态资源,动态资源。在web容器中,有着监听器、过滤器、servlet几种配置,Tomcat启动时加载配置有着先后顺序。

weixin_63445311的博客 2207

sap外币重估流程图_SAP 外币评估方法(Valuation Method,评估方法)

在FI-GL模块评估外币时(T-code:F.05),需要输入ValuationMethod。下面分解一下评估方法是如何定义的。IMG -> FI -> General LedgerAccounting ->Business Transactions ->Closing ->Valuating -> ForeignCurrency Valuation ->...

weixin_39640543的博客 2357

拦截器?有什么好处?起什么作用?

拦截器可以说相当于是个过滤器:就是把 不想要的或不想显示的内容给过滤掉。拦截器可以抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。 比如在登入一个页面时,如果要求用户密码、权限等的验证,就可以用自定义的拦截器进行密码验证和权限限制。对符合的登入者才跳转到正确页面。这样如果有新增权限的话,不用在action里修改任何代码,直接在interceptor里修改就行了。 ...

wu1317581750的博客 1万+

IEEE ACCESS Please note that all author names should be listed in English.(所有作者名需用英文名列出)

很奇怪哈,我明明手稿和提交页面作者都是用的英文,但是为什么还是会提示我没用英文呢?后来给编辑发消息,回的很快,他给我发了一个截图,确实是出现中文,但是我还是不知道为啥会出现中文。直到晚上回寝室洗澡的时候忽然想起来了是不是orcid的原因,因为它会强制作者绑定一个orcid账号,而我的orcid账号的名字刚好是中文的。当然这个只是我的一个猜想,但是我觉得可能性很大。我的第二篇论文已经投稿了快三个月了,效果非常的不好,所以我打算转投IEEE ACCESS了,希望这里可以给我一点好的建议。

kuyecsl的博客 3312

Python+gensim【中文LDA】简洁模型

文章目录完整代码过程详解words_lsdictionarydictionary.doc2bow函数corpuslda 完整代码 from gensim import corpora, models import jieba.posseg as jp # 待分析文本集 text1 = '美国教练坦言,没输给中国女排,是输给了郎平' text2 = '中国女排世界排名第一?真实水平如何,听听巴西和美...

ArYe 2万+

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

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

voins的博客 5703

【OpenClaw从入门到精通】第19篇:OpenClaw电商实战:从零搭建比价+库存监控+自动调价全自动化系统(2026实测附完整代码)

2026年OpenClaw成为全球最火开源项目,电商行业因其场景高频、数据标准化成为其核心落地领域。本文针对电商从业者面临的比价繁琐、库存混乱、调价滞后三大痛点,基于OpenClaw的“接入层-执行层-决策层”三层架构,从零拆解智能比价、多平台库存监控、动态自动调价三大核心场景的实现逻辑。文中包含完整的环境配置、技能安装、代码实现(含Python脚本与YAML配置)、执行结果验证,同时补充关键算法原理与避坑指南,兼顾新手入门与进阶提升。读者可直接参考本文实操流程,快速搭建属于自己的电商自动化系统,实现7×2

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2239

Struts2 拦截器原理和配置

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

峰少少博文 343

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

转:struts2 拦截器原理及配置

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

oook 158

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

struts2中拦截器的原理与配置

首先,向大家推荐一个关于拦截器较好的blog:http://developer.51cto.com/art/200906/126894.htm 1.拦截器的使用规则:先定义;再使用; 拦截器的定义: shengsiyuan 拦截器的使用: action2 ${

nuisthou的博客 425

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Struts2 拦截器(Interceptor )原理和配置(转自http://blog.youkuaiyun.com/kingmax54212008/article/details/51777851)...

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

diku9497的博客 199

Struts2的图片上传和拦截器

图片上传 Action代码 //注意如果前台的上传input框的name不一样那么这里也要修改(将三个变量中的file改成你input框的name) private File file; private String fileContentType; private String fileFileName; //图片上传代码 /** * 上传图片 * @return ...

qq_43059674的博客 276

struts2拦截器原理

一、理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用

风~忆 500

struts拦截器原理

一、理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. 2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前

执着,也是一种态度 447
上一篇: mysql安装error:the security setting could not be applied
下一篇: ant 学习笔记
dw_java08
博客等级 码龄15年 122粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值