struts2拦截器的实现
拦截器顾名思义,就是当有请求访问action时候,拦截器拦截下请求进行某些操作(但是呢,当请求到来时,请求会先到达action类的构造方法,再到达拦截器)。这是请求访问action的时序图:
在struts2当中自带这很多很强大的拦截器,那么是不是我们自己实现一个自定义的struts2的拦截器是不是也就很困难了?答案是否定的。相反,实现struts2的自定义拦截器是相当的容易的。
实现接口方式实现一个自定义的struts2拦截器:
所需实现接口:com.opensymphony.xwork2.interceptor.Interceptor
实现了该接口,也必须实现接口下的三个方法:
init():这是拦截器的初始化方法,在服务器启动只是就会触发该方法,也可以在这方法进行一些初始化的操作,比如对一个字段进行赋值等等。但是呢,在对一个属性进行赋值时候,必须给该属性实现get/set方法。否则是不可以实现对该实行赋值的,怎么赋值呢?一般可以在struts.xml中定义拦截器时候进行赋值,待会再进一步的描述如何进行赋值。
intercept():这个方法是拦截器的核心方法,主要是实现拦截器的逻辑处理等等操作。在请求访问action时候,就会进入到该方法。在这方法中要调用arg0.invoke()。在请求访问action时候,会先进入到该方法,执行arg0.invoke()前代码逻辑语句,执行到arg0.invoke()时,方法action类的相关操作,之后调用action的会调execute。在执行完action的相关操作,在执行到arg0.invoke()后面的逻辑代码,按照堆栈的方法逐个的访问拦截器退出。
destroy():这是struts2拦截器的销毁操作,在拦截器被销毁时候就会执行到该方法。
如何配置struts2拦截器呢?
在struts.xml当中,在package内的顶部配置拦截器。
<interceptors></interceptors>声明拦截器
<interceptor></interceptor>配置拦截器
<param></param>给该拦截器内的属性初始化,如不用初始化拦截器内的属性,则不需添加该标签,name值要与拦截器的属性一致。
<interceptor-ref></interceptor-ref>在action标签内引用已配置的拦截器。
但是细心的伙伴也会发现,在<interceptor-ref></interceptor-ref>标签内也有<param></param>标签,但是呢,改标签也是与配置拦截器时候的而是用方法一致的。但是值得我们注意的是,在相同的拦截器进行相同的属性进行初始化成为不同的值,先后顺序是:配置--->引用。引用时候赋值会覆盖了配置时候赋的值。现在又有一个问题来了,拦截器init方法到底如何被调用呢,也就是说,到底是在声明配置拦截器时候调用还是在引用拦截器时候被调用?根据对拦截器属性的初始化以及init方法打印语句来看:当action标签中出现了引用拦截器时,会在引用之后调用该拦截器。
在添加拦截器时候,千万别忘了添加struts2默认的拦截器<interceptor-ref name="defaultStack"></interceptor-ref>,系统默认的对不添加拦截器的action添加上了改拦截器,但是我们主动的添加拦截器之后,会覆盖掉该方法。不添加很容易会出现意想不到的等情况。
配置示例代码:
<package name="default" namespace="/" extends="struts-default"> <interceptors> <interceptor name="firstInterceptor" class="com.usc.geowind.lilin.interceptors.FirstInterceptor"> <param name="name">gaosi</param> </interceptor> </interceptors> <!--method属性指定是action触发的方法 --> <action name="firstAction" class="com.usc.geowind.lilin.actions.FirstAction" method="execute"> <interceptor-ref name="firstInterceptor"> <param name="name"> lilin</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 结果指向 --> <!-- name属性是指定接收的action返回来的字符串数值 --> <result name="success"> /success.jsp </result> <result name="fail"> /fail.jsp </result> </action> </package>
这样自定义拦截器就基本配置完成了。
当我们要在几个action当中,引用相同拦截器,会不会上面介绍的方法会出现代码冗余的状况?答案是肯定的。这时候就有一个新的概念:拦截器栈队。拦截器栈队:将若干个相同的拦截器打包成为一个拦截器组,在action中引用该拦截器组就可以了。
<package name="default" namespace="/" extends="struts-default"> <interceptors> <!-- 配置拦截器 --> <interceptor name="firstInterceptor" class="com.usc.geowind.lilin.interceptors.FirstInterceptor"> <param name="name">gaosi</param> </interceptor> <!-- 拦截器栈队 --> <interceptor-stack name="allInterceptor"> <interceptor-ref name="firstInterceptor"> <param name="name"> lilin</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!--method属性指定是action触发的方法 --> <action name="firstAction" class="com.usc.geowind.lilin.actions.FirstAction" method="execute"> <!-- 引用拦截器栈队 --> <interceptor-ref name="allInterceptor"></interceptor-ref> <!-- 结果指向 --> <!-- name属性是指定接收的action返回来的字符串数值 --> <result name="success"> /success.jsp </result> <result name="fail"> /fail.jsp </result> </action> </package>
<interceptor-stack></interceptor-stack>就是拦截器栈队。将所需的拦截器加到栈队中就可。
配置默认的拦截器
<default-interceptor-ref></default-interceptor-ref>在改标签中可以配置struts拦截器,在action中不引用拦截器的情况下,struts会默认的引用该默认拦截器
方法拦截器:
在类中需要继承com.opensymphony.xwork2.interceptor.MethodFilterInterceptor类并重写方法doIntercept()
在配置当中有那么一点不同。
对add,delete方法进行拦截
<interceptor name="MethodInterceptor" class="com.usc.geowind.lilin.interceptors.SecINterceptor"> <param name="includeMethods">add,delete</param> </interceptor>
也可以对某方法进行不拦截:如,对delete ,add方法进行不拦截
<interceptor name="MethodInterceptor" class="com.usc.geowind.lilin.interceptors.SecINterceptor"> <param name="excludeMethods">add,delete</param> </interceptor>
拦截器的基本内容就这些了,但是拦截器还是有很大的作用的,有待继续深入了解。
相关推荐
SSH2 框架中的 Struts2 拦截器功能允许开发者在特定操作执行前或执行后进行自定义处理,例如登录验证、权限检查等。在本文中,我们将探讨如何使用 Struts2 的拦截器来实现登录验证功能。 首先,我们需要了解 Struts...
1. 配置Struts2:设置Struts2的过滤器,配置struts2的核心拦截器栈,定义Action和Result。 2. 配置Spring:声明Bean,注入依赖,配置数据源和事务管理器。 3. 配置Hibernate:设置数据库连接信息,映射实体类,配置...
3. **图片上传处理**:在Struts2中,通常会有一个专门处理文件上传的Action,它需要继承`org.apache.struts2.interceptor.FileUploadInterceptor`拦截器,以支持文件上传。用户上传的图片会被暂时存储在服务器的一个...
Struts1 框架是Java Web...总的来说,这个项目提供了一个学习和实践Struts1拦截器的实例,尤其是SAIF插件的应用。通过深入理解并动手运行此项目,你可以掌握如何在实际开发中利用拦截器来提高应用的灵活性和可维护性。
首先,Struts2是Action-based的MVC框架,它提供了一种灵活的方式来处理用户请求,并通过拦截器机制增强了应用的可扩展性。Struts2的配置文件(struts.xml)是核心,用于定义Action类及其对应的URL路径、结果页面等。...
在这个项目中,Struts2提供了一套灵活的动作和拦截器机制,使得文件上传可以通过自定义Action类来实现,同时它支持与Ajax的交互,可以实现无刷新的进度条展示。 2. **Spring**:Spring框架是一个全面的企业级应用...
它的核心是基于拦截器的架构,使得开发者可以通过自定义拦截器来扩展功能,如处理异常、数据验证等。 SSH中的Spring框架则是Java企业级应用的核心组件,它提供了一种声明式事务管理方式,可以简化事务处理。Spring...
`struts2`的jar文件是框架运行的基础,包含核心控制器、拦截器、结果类型和其他必要的组件。这些jar文件提供了处理请求、响应以及与其他组件交互的能力。 2. **.struts2.xml配置文件** - **全局配置**:在`struts...
总结来说,这个"Struts2拦截器的简单登录应用"是学习Struts2拦截器的一个实用案例,通过它,初学者可以掌握如何利用拦截器进行权限控制,这对于理解和构建安全的Web应用至关重要。对于SSH(Spring、Struts2、...
Struts2自定义拦截器的配置是Struts2框架中一个非常重要的功能,它允许开发者在Action执行前后插入自定义的逻辑,以实现如权限验证、日志记录、性能监控等多种需求。以下是对标题和描述中涉及的知识点的详细说明: ...
**Struts2** 是一个基于MVC(Model-View-Controller)设计模式的开源Web应用框架,主要用于控制应用的流程,提供了丰富的拦截器和结果类型,使得开发者可以方便地处理HTTP请求和响应。Struts2的核心是Action类,它...
Struts2提供了丰富的拦截器机制,使得开发者可以通过插件扩展功能,支持AJAX,提供强大的表单验证和结果映射等功能。 2. **Spring**:Spring是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面...
在Struts2中,拦截器是实现业务逻辑增强的一种方式,它们在Action执行前后执行,可以实现日志记录、权限验证、性能监控等功能。要添加拦截器,你需要在struts.xml配置文件中定义拦截器栈,并关联到特定的Action或者...
标题中的"ssh+aop+log4j+日志拦截器+注解"涉及到的是Java Web开发中的几个核心组件和技术,这些技术在构建大型、分布式的企业级应用时常常被使用。下面将详细介绍这些知识点: 1. SSH (Spring, Struts, Hibernate)...
Struts2框架在设计上强调了组件化和插件化,它提供了丰富的拦截器(Interceptor)机制,允许开发者自定义行为来处理请求和响应。Struts2的核心组件包括Action、Result、Interceptor和配置文件等,这些组件共同协作,...
拦截器是Struts2的重要特性,它们在Action调用前后执行,实现诸如日志、事务管理等功能: 1. **内置拦截器**:如params预处理请求参数,i18n处理国际化,logger记录日志。 2. **自定义拦截器**:根据需求编写自己的...
Struts拦截器(Interceptor)是基于Java的Spring MVC和Struts2框架的一种设计模式,它在请求被控制器处理之前和之后执行特定的操作。在SSH(Struts2、Spring、Hibernate)系统中,拦截器用于增强应用程序的功能,...
3. **拦截器(Interceptor)**:拦截器是Struts2的一大特色,它允许在Action执行前后插入自定义逻辑。常见的拦截器有日志记录、权限验证、事务管理等。通过配置拦截器栈,可以灵活地调整应用程序的行为。 4. **结果...
2. **Struts拦截器**:学习如何自定义拦截器,以实现如日志记录、权限控制等功能。 3. **Action和结果类型**:掌握Action类的设计模式,以及如何定义和使用不同的结果类型。 4. **Struts标签**:熟悉Struts提供的...
通常,可以通过编写Spring Security或Struts2拦截器来实现这一功能。拦截器会检查用户是否已登录,如果未登录则重定向到登录页面。同时,也可以设置登录尝试次数限制,超过次数后锁定账号。 5. **注册登录验证** ...