Struts2拦截器的原理及实现

m13286282 2015-06-03 03:31:10
一、理解Struts2拦截器
1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.
2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
二、实现Struts2拦截器原理
Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器
三、定义Struts2拦截器。
Struts2规定用户自定义拦截器必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。该接口声明了3个方法
void init(); void destroy(); String intercept(ActionInvocation invocation) throws Exception;
复制代码
其中,init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。
intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。
不过,struts中又提供了几个抽象类来简化这一步骤。
public abstract class AbstractInterceptor implements Interceptor;
复制代码
其中AbstractInterceptor提供了init()和destroy()的空实现,使用时只需要覆盖intercept()方法;
而MethodFilterInterceptor则提供了includeMethods和excludeMethods两个属性,用来过滤执行该过滤器的action的方法。可以通过param来加入或者排除需要过滤的方法。
来个例子:自定义的Interceptor继承MethodFilterInterceptor
package com.ifs.Interceptor;
import java.util.Map;
import com.ifs.entity.Admin;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class SecurityInterceptor extends MethodFilterInterceptor{
/**
*
*/
private static final long serialVersionUID = 1L;
public void init() {
super.init();
}
@Override
public void destroy() {
super.destroy();
}
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
Map<String , Object> sessions = invocation.getInvocationContext().getSession();
Admin admin =(Admin)sessions.get("adminLogin");
if(admin!= null){
String result = invocation.invoke();
return result;
}else{
return "suok";
}
}
}
复制代码
struts.xml
<result-types>
<result-type name="streamx" class="com.sunspoter.lib.web.struts2.dispatcher.StreamResultX"/>
</result-types>
action调用:
<!-- 指定要调用的拦截器 -->
<interceptor-ref name="MyInterceptor">
<param name="excludeMethods">login</param> <!-- 指定要拦截的方法 -->
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
复制代码
拦截器
名字
说明
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
...全文
261 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
软件概述 UG(Unigraphics NX)是一款由西门子(Siemens PLM Software)开发的交互式CAD/CAM/CAE系统。作为全球领先的产品工程解决方案,它集成了产品设计、工程仿真与制造加工于一体。其功能强大且应用广泛,能够轻松实现各种复杂实体和造型的构造,为模具、汽车、航空航天及通用机械等行业提供了高性能的机械设计与制图灵活性。 软件基础信息 • 支持系统: 64位 Windows 10、Windows 11 核心功能模块 一、创新设计:高效、灵活、无缝协同 全链路产品设计 涵盖从2D布局、3D建模、装配设计到图纸文档记录的各个环节,大幅提升设计吞吐量,缩短交付周期超35%。 强大的同步建模技术 打破数据壁垒,可无缝导入并直接修改来自其他CAD系统的几何模型,是跨平台协同设计的理想选择。 复杂装配管理 专为大型复杂产品打造,即使面对成千上万的零件也能从容应对,快速识别并解决数字样机中的干涉等问题。 集成设计验证 内置自动验证功能,实时监控设计是否符合公司及行业标准;结合PLM数据可视化合成,辅助工程师做出更明智的决策。 二、综合仿真(Simcenter 3D):精准预测,降低试错成本 极速前后处理 依托先进的几何引擎,将强大的分析命令与几何编辑紧密集成,相比传统有限元工具,可缩短高达70%的仿真建模时间。 全方位结构分析 在同一环境中集成线性静力学、动态、疲劳及非线性分析,底层由业界顶尖的NX Nastran解算器提供支持,确保计算的高精度与可靠性。 声学与热管理分析 提供内外声学仿真以优化音质、降低噪音;具备一流的热传导仿真能力,帮助电子产品和工业机械实现最佳热管理方案。 多物理场耦合 简化了结构动力学、热传导、流体流动等复杂物理现象的模拟过程,消除外部数据传输错误,真实还原产品运行工况。 三、智能制造(CAM):打通从计划到车间的数字主线 全面的制造解决方案 提供从工装设计、CAM编程到机床控制器(如Sinumerik)的一体化支持,助力制定更科学的生产决策。 深度集成的PLM环境 借助Teamcenter实现数据和流程的统一管理,避免多数据库冲突,支持重用验证过的加工工艺与刀具库。 车间级互联 通过DNC系统与车间无缝对接,直接将加工数据和刀具清单下发至CNC机床,实现计划与生产的紧密结合。 提质增效 优化NC编程与刀具路径,提升表面精加工水平与零件精度;减少人为错误,显著提高新机床部署成功率及制造资源利用率。 总结 UG NX 2023作为一款集成化的产品工程解决方案,通过其强大的设计、仿真和制造功能,为现代制造业提供了完整的数字化产品开发平台。无论是复杂产品的设计验证,还是精密制造的流程优化,UG NX 2023都能为工程师团队提供高效、可靠的解决方案,助力企业提升产品创新能力和市场竞争力。 适用领域 模具设计、汽车制造、航空航天、通用机械、消费电子等
软件概述 UG(Unigraphics NX)是一款由西门子(Siemens PLM Software)开发的交互式CAD/CAM/CAE系统。作为全球领先的产品工程解决方案,它集成了产品设计、工程仿真与制造加工于一体。其功能强大且应用广泛,能够轻松实现各种复杂实体和造型的构造,为模具、汽车、航空航天及通用机械等行业提供了高性能的机械设计与制图灵活性。 软件基础信息 • 支持系统: 64位 Windows 10、Windows 11 核心功能模块 一、创新设计:高效、灵活、无缝协同 全链路产品设计 涵盖从2D布局、3D建模、装配设计到图纸文档记录的各个环节,大幅提升设计吞吐量,缩短交付周期超35%。 强大的同步建模技术 打破数据壁垒,可无缝导入并直接修改来自其他CAD系统的几何模型,是跨平台协同设计的理想选择。 复杂装配管理 专为大型复杂产品打造,即使面对成千上万的零件也能从容应对,快速识别并解决数字样机中的干涉等问题。 集成设计验证 内置自动验证功能,实时监控设计是否符合公司及行业标准;结合PLM数据可视化合成,辅助工程师做出更明智的决策。 二、综合仿真(Simcenter 3D):精准预测,降低试错成本 极速前后处理 依托先进的几何引擎,将强大的分析命令与几何编辑紧密集成,相比传统有限元工具,可缩短高达70%的仿真建模时间。 全方位结构分析 在同一环境中集成线性静力学、动态、疲劳及非线性分析,底层由业界顶尖的NX Nastran解算器提供支持,确保计算的高精度与可靠性。 声学与热管理分析 提供内外声学仿真以优化音质、降低噪音;具备一流的热传导仿真能力,帮助电子产品和工业机械实现最佳热管理方案。 多物理场耦合 简化了结构动力学、热传导、流体流动等复杂物理现象的模拟过程,消除外部数据传输错误,真实还原产品运行工况。 三、智能制造(CAM):打通从计划到车间的数字主线 全面的制造解决方案 提供从工装设计、CAM编程到机床控制器(如Sinumerik)的一体化支持,助力制定更科学的生产决策。 深度集成的PLM环境 借助Teamcenter实现数据和流程的统一管理,避免多数据库冲突,支持重用验证过的加工工艺与刀具库。 车间级互联 通过DNC系统与车间无缝对接,直接将加工数据和刀具清单下发至CNC机床,实现计划与生产的紧密结合。 提质增效 优化NC编程与刀具路径,提升表面精加工水平与零件精度;减少人为错误,显著提高新机床部署成功率及制造资源利用率。 总结 UG NX 2023作为一款集成化的产品工程解决方案,通过其强大的设计、仿真和制造功能,为现代制造业提供了完整的数字化产品开发平台。无论是复杂产品的设计验证,还是精密制造的流程优化,UG NX 2023都能为工程师团队提供高效、可靠的解决方案,助力企业提升产品创新能力和市场竞争力。 适用领域 模具设计、汽车制造、航空航天、通用机械、消费电子等

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧