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

深入Scrapy ItemLoader:打造优雅高效的Python爬虫数据清洗流水线 ItemLoader是 Scrapy 提供的声明式数据加载工具。它的核心理念是:将数据提取(从response中取原始值)和数据清洗/验证(处理空值、格式转换、默认值等)分离开。你可以把它想象成一个工厂流水线:原始零件(selector提取的文本)进入,经过一道道工序(输入处理器),组装成最终产品(Item字段)。首先在items.py中定义清晰的数据结构。使用搭配类型注释(虽然Scrapy自身不强制,但对人和IDE友好)。 阅读详情

什么是拦截器(Interceptor)

拦截器是struts2框架最重要的特性之一。它可以让你在Action 方法执行前后(Result执行之后)进行一些功能处理。在前面学习Action和学习Result的时候我们就已经开始学习拦截器了,因此现在我们对如何使用它已经不陌生了。

在学习Spring的时候我们会接触到一种设计思想,叫做面向切面编程(AOP)。也就是说我们将一些通用的功能组件抽取出来,我们在功能模块中不需要编写这些与逻辑功能无关的代码,然后我们通过某种方式(动态代理)将这些通用组件的功能附加到我们的功能模块上。Struts2中的拦截器就和这种模式差不多,Strtus2框架会将我们在配置文件中为Action配置的拦截器和Action以及Result组合在一起,附加到一个新的对象上,那么在执行的时候,只需要对这个新的对象加以操作,那么这些拦截器和Action以及Result就都可以得以执行了。这个新的对象就负责了拦截器和Action的Result的组织,它就是ActionInvocation类。


ActionInvocation代表了Action的执行状态,它持有Intercptors和Action的对象实例。通过重复的调用它的invoke方法,使得其中的Interceptors,Action和Result都得以执行。

Strtus2内建的拦截器

Strtus2内建了许多拦截器,这些可以在struts-default.xml中找到:

<interceptors>

            <interceptor name="alias"class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>

            <interceptor name="autowiring"class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

            <interceptor name="chain"class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>

            <interceptor name="conversionError"class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

            <interceptor name="cookie"class="org.apache.struts2.interceptor.CookieInterceptor"/>

            <interceptor name="clearSession"class="org.apache.struts2.interceptor.ClearSessionInterceptor"/>

            <interceptor name="createSession"class="org.apache.struts2.interceptor.CreateSessionInterceptor"/>

            <interceptor name="debugging"class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor"/>

           <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>

            <interceptor name="exception"class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>

            <interceptor name="fileUpload"class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

            <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>

            <interceptor name="logger"class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>

            <interceptor name="modelDriven"class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

            <interceptor name="scopedModelDriven"class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>

            <interceptor name="params"class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

            <interceptor name="actionMappingParams"class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/>

            <interceptor name="prepare"class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>

            <interceptor name="staticParams"class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>

            <interceptor name="scope"class="org.apache.struts2.interceptor.ScopeInterceptor"/>

            <interceptor name="servletConfig"class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>

            <interceptor name="timer"class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>

            <interceptor name="token"class="org.apache.struts2.interceptor.TokenInterceptor"/>

            <interceptor name="tokenSession"class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>

            <interceptor name="validation"class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

            <interceptor name="workflow"class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>

            <interceptor name="store"class="org.apache.struts2.interceptor.MessageStoreInterceptor"/>

            <interceptor name="checkbox"class="org.apache.struts2.interceptor.CheckboxInterceptor"/>

            <interceptor name="profiling"class="org.apache.struts2.interceptor.ProfilingActivationInterceptor"/>

            <interceptor name="roles"class="org.apache.struts2.interceptor.RolesInterceptor"/>

            <interceptor name="annotationWorkflow"class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/>

            <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor"/>

</interceptors>

下面是关于这些内建拦截器的说明:

拦截器

名字

说明

Alias Interceptor

alias

在不同请求之间将请求参数在不同名字件转换,请求内容不变

Chaining Interceptor

chain

让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。

Checkbox Interceptor

checkbox

添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

Cookies Interceptor

cookies

使用配置的name,value来是指cookies

Conversion Error Interceptor

conversionError

将错误从ActionContext中添加到Action的属性字段中。

Create Session Interceptor

createSession

自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

Debugging Interceptor

debugging

提供不同的调试用的页面来展现内部的数据状况。

Execute and Wait Interceptor

execAndWait

在后台执行Action,同时将用户带到一个中间的等待页面。

Exception Interceptor

exception

将异常定位到一个画面

File Upload Interceptor

fileUpload

提供文件上传功能

I18n Interceptor

i18n

记录用户选择的locale

Logger Interceptor

logger

输出Action的名字

Message Store Interceptor

store

存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

Model Driven Interceptor

model-driven

如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

Scoped Model Driven

scoped-model-driven

如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

Parameters Interceptor

params

将请求中的参数设置到Action中去。

Prepare Interceptor

prepare

如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor

scope

将Action状态存入session和application的简单方法。

Servlet Config Interceptor

servletConfig

提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor

staticParams

从struts.xml文件中将中的中的内容设置到对应的Action中。

Roles Interceptor

roles

确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor

timer

输出Action执行的时间

Token Interceptor

token

通过Token来避免双击

Token Session Interceptor

tokenSession

和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

Validation Interceptor

validation

使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor

workflow

调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活profile

我们通过定义拦截器栈的方式来组织这些拦截器,在前面的学习中我也接触到了struts2内建的拦截器栈drfaultStack。下面我们看一些有关拦截器的声明和配置.

拦截器的声明和配置

我们从struts-dfault.xml文件中已经看过了如何声明一个拦截器。首先拦截其的声明适应<interceptor>元素,name属性用于指定拦截器的名字,class属性用于指定拦截器的实现类。同时<interceptor>元素必须放在<interceptors>元素里。

在<interceptors>元素里可以使用<interceptor-stack>元素和<interceptor-ref>元素来定义拦截器栈和引用拦截器(或拦截器栈),还可以在使用<param>元素来向拦截器传递参数:

<interceptor-stack name="executeAndWaitStack">

      <interceptor-ref name="execAndWait">

            <param name="excludeMethods">input,back,cancel</param>

       </interceptor-ref>

       <interceptor-ref name="defaultStack"/>

       <interceptor-ref name="execAndWait">

            <param name="excludeMethods">input,back,cancel</param>

       </interceptor-ref>

 </interceptor-stack>

为action配置拦截器。这个我们在前面的学习中已经学习过了,我们可以在<package>元素中配置默认的拦截器栈,也可以在<action>元素中使用<interceptor-ref>元素来为Action配置拦截器或拦截器栈。

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

       

       <interceptors>

           <interceptor-stackname="luo">

              <interceptor-refname="exception"/>

                <interceptor-refname="alias"/>

                <interceptor-refname="servletConfig"/>

                <interceptor-refname="i18n"/>

                <interceptor-ref name="prepare"/>

                <interceptor-refname="chain"/>

                <interceptor-refname="scopedModelDriven"/>

                <interceptor-refname="modelDriven"/>

                <interceptor-refname="fileUpload"/>

                <interceptor-refname="checkbox"/>

                <interceptor-refname="multiselect"/>

                <interceptor-refname="staticParams"/>

                <interceptor-refname="actionMappingParams"/>

                <interceptor-refname="params">

                  <param name="excludeParams">dojo\..*,^struts\..*</param>

                </interceptor-ref>

                <interceptor-refname="conversionError"/>

              

                <interceptor-refname="workflow">

                    <param name="excludeMethods">input,back,cancel,browse</param>

                </interceptor-ref>

                <interceptor-refname="debugging"/>

            

           </interceptor-stack>

       </interceptors>  

       <default-interceptor-ref name="luo"></default-action-ref>

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

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

           <result name="input">/input.jsp</result>

       </action>

 

    </package>


1.  <action name="helloworldAction" class="cn.javass.action.action.HelloWorldAction">  

2.              <param name="account">test</param>  

3.           <result>/s2impl/welcome.jsp</result>  

4.           <interceptor-ref name="staticParams"/>  

5.           <interceptor-ref name="basicStack"/>  

6.  </action> 

注:如果要声明新的拦截器,那么必须声明在<package>元素下的<intercptors>元素下。<action>元素中只能引用拦截器,不能声明拦截器。


YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点) 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块,我们将其用于C2f中组合出一种新的结构,来替换我们网络中的模块可以达到一种轻量化的作用,我将其用于我的数据集上实验,包括多个类别的数据集,其在轻量网络结构的同时,却能够提高一定的mAP精度,所以这是一种十分高效的模块,该网络结构非常适合那些模型精度已经无法提到,想要从轻量化模型的角度入手的读者使用。欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。 阅读详情

相关推荐

SpringCloudGateway网关高频20个面试题整理

Spring Cloud Gateway 是基于 Spring 5、Project Reactor 和 Spring Boot 2 构建的 API 网关,提供动态路由、监控、弹性、安全等核心功能。Spring Cloud Gateway 是 Spring Cloud 生态中的 API 网关,用于微服务架构中的请求路由、负载均衡、限流、鉴权等。实现@Component@Override// 逻辑处理。

u012024132的专栏 1114

struts2--java.lang.IllegalAccessException: Class ognl.OgnlRuntime can not acces

    [c-sharp] view plaincopyprint? 2010-10-19 18:27:22 com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn   警告: Error setting expression 'nnew.nTitle' with value '[Ljava...

lzhw1985的专栏 297

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1949

解决struts2,hibernate与jsonpulugin集成时的一个异常

最近用struts2,hibernate集成jsonpulugin时遇到一个异常,在baidu和google上查了很久,很多人遇到了类似的问题,但都没有满意的答案.看了两天源码,终于知道怎么解决这个问题,和大家分享下, 异常描述如下: com.googlecode.jsonplugin.JSONException: java.lang.IllegalAccessException: C...

无事忙 205

眼动数据分析基础_AOI分析动态刺激物

如果您正在研究人们对如视频、动画等动态刺激物的视觉行为,动态AOI工具可为您提供类似静态AOI工具对于图片及其他静止刺激物分析的同样功能。创建和编辑动态AOI的过程和静态AOI相似。 关于动态AOI工具的使用,有几点非常重要: 多个看到相同线性动态刺激物的用户的眼动数据叠加是有价值的; 动态AOI不能用于非线性动态记录的分析; 动态AOI不能用于静态刺激物,如图片的分析; 动态AOI可以被开启、关闭、移动、调整大小及跟踪相关分析对象 首先,我们来定义两种不同的动态刺激物:线性动态刺激物(LDS),是指固

Kobe123brant的博客 3501

Cobalt Strike4.0安装包(内附中文版)

1.什么是 Cobalt Strike Cobalt Strike 是一个为对手模拟和红队行动而设计的平台,主要用于执行有目标的攻击和模拟高级威胁 者的后渗透行动。 Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、W...

梦之序章的博客 2万+

struts2 全局拦截器,显示请求方法和参数

后台系统中应该需要一个功能那就是将每个请求的url地址和请求的参数log出来,方便系统调试和bug追踪,使用struts2时可以使用struts2的全局拦截器实现此功能: import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servl...

aaronyan1990的博客 197

【ArcGIS微课1000例】0118:一文讲清楚tif(geotiff)栅格数据格式

TIFF(Tagged Image File Format)是一种常见的图像文件格式,它被广泛用于存储和传输各种类型的图像数据。图像存储:TIFF格式可以存储多通道的位图图像,包括灰度图、彩色图和透明度图等。它支持不同的像素深度,可以是8位、16位、24位或32位等。因此,TIFF格式非常适合存储高质量的图像数据,包括照片、卫星图像、医学影像等。无损压缩:TIFF格式支持无损压缩,这意味着图像可以被压缩而无需损失任何像素信息。这种压缩方式可以减小文件大小,而不会降低图像的质量。

智慧空间实验室 2816

Struts2拦截器(Interceptor)(上)

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

weixin_30566149的博客 151

【100分- 求最多可以派出多少支团队】(题目+思路+Java&C++&Python解析+在线测试)

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。

m0_73659489的博客 313

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

Struts2拦截器Interceptor创建与配置

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

javae100的博客 4152

QT上位机开发(掌握一点c++基础)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 c++是c语言的补充和扩展,本身的语法构成也是在一直迭代中。相信很多同学上大学读书的时候,或多或少对c语言有所了解,对它的变量、指针、函数也应该不陌生。既然大家都有c语言基础的话,那么在这方面稍微拓展一下的话,就可以学会c++了。当然c++本身的内容很多,很多方面还很琐碎,但我们学习的时候还是应该把精力放在那些经常使用到的语法上面。

嵌入式-老费,一个分享专业嵌入式知识的blog 1130

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

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

Golden_lion的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

5.Struts 2拦截器(Interceptor)

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

相互学习 共同进步 1038

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

乐乐的专栏 3171

Devexpress16.2.6破解工具

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

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

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

FcBayernMunchen的专栏 4962

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

一、拦截器与过滤器的区别 二、Interceptor的实现 1、写一个类继承com.opensymphony.xwork2.interceptor.AbstractInterceptor 在org.zttc.itat.interceptor包下新建类HelloInterceptor.java并继承com.opensymphony.xwork2.interceptor.Abst

yyyyyyyyyyyy 690

Struts2拦截器Interceptor的使用

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

BullZeng的博客 1096

【Struts2笔记整理八】拦截器

拦截器(Interceptor),在 Struts2 中起到拦截 Action 的作用,它与 Filter 有很大的区别: Filter: 过滤器,过滤从客户端向服务器发送的请求。 Interceptor: 拦截器,拦截的是客户端对 Action 的访问。它是更细粒度化的拦截。(可以拦截 Action 中的具体的方法)。

小异常的博客 565

struts2 Interceptor怎么写

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

u010395804的专栏 1109
上一篇: 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、付费专栏及课程。

余额充值