Struts2 Action原理

Struts2 Action原理

一、6大核心组件原理

6大核心组件作用
1、FC
前端控制器,负责统一的分发请求。
2、Action
业务控制器,负责处理某一类业务。
3、ValueStack
Action与JSP数据交互的媒介。
4、Interceptor
拦截器,负责扩展Action,处理Action的共通事务。
5、Result
负责输出的组件。
6、Tags
标签,负责显示数据、生成框体

Struts2中包含6大核心组件,它们彼此关联、相互协作,共同处理了一次请求。深刻的理解这6大核心组件的关系,实际上也就是理解了Struts2的基本原理。



二、Session获取


Struts2中获取Session的方式有3种,大家掌握其中任何一种都可以。

1、通过ActionContext.getContext().getSession()获得Session,
注意其返回类型为Map<String,Object>。

2、通过ServletActionContext.getRequest().getSession()获得Session,
其返回类型为HttpSession。

3、让Action实现SeesionAware接口,实现setSession方法,Struts2会在实例化Action后调用该方法,通过方法参数将Session对象注入进来。定义成员变量,接收注入进来的Session对象。


各种方式的对比

1、返回类型的对比
第1、3种方式,获取的Session是Map<String,Object>类型,Struts2采用该类型的目的是简化Session对象,而Session的存储结构和Map是一致的。
第2种方式,获取的Session是HttpSession,为了保持兼容性,Struts2提供了获取该类型的方式。

2、获取方式的对比
第1、2种方式,是我们主动的获取Session。
第3种方式,是采用注入的方式自动注入Session,这种方式是被动的。

3、推荐使用第3种方式
这种方式采用了注入的思想,更为灵活。并且是面向接口编程,符合主流的规范。


三、Result原理

Result是用于做输出的组件,用于向页面输出一些内容,转发、重定向可以理解为特殊方式的输出。每一个Result实际上就是一个类,这些类都实现了共同的接口Result,Struts2预置了10种类型的Result,他们被定义在struts-default.xml中 。



常用类型的Result


1. dispatcher
dispatcher类型是用于转发的Result,可以将请求转发给JSP。这种类型的Result对应的类为ServletDispatcherResult,它是Struts2默认的Result类型,该默认行为是定义该Result时,通过default="true"指定的 。
在此之前,我们使用的Result都是这种默认的dispatcher类型的Result。


2. redirectAction
redirectAction类型是用于将请求重定向给另外一个Action,这种类型Result对应的类为ServletActionRedirectResult 。



四、streamResult&图片验证码

stream


stream类型是用于向页面输出二进制数据,这种类型的Result,可以将二进制数据输出到请求发起端, 它会自动创建输出流,接入Action中定义的输入流并将其输出。
语法

 <result name=”success” type=”stream”>
    <param name=”inputName”>codeStream</param>
 </result>


type=”stream”中的stream,引用的是Struts2在
  struts-default.xml中定义的result的名称,是固定写法。
name=”inputName”中的inputName,指的是该result对应的类StreamResult中的属性,用意是要为其属性赋值,是固定写法。
codeStream指的是Action中某属性名,该属性需为InputStream类型,这里的写法不固定,看属性名而定。




使用步骤:

1、在Action中,定义InputStream类型的输出属性 。

2、在struts.xml中,配置该Action。

3、在action下,配置stream类型的result。

笔者将在下一节演示验证码的生成和获取,请继续关注!


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值