action (Struts 2动作)
Struts2是一个平等的系统,只要满足了对框架该尽的职责,任何类都可以成为动作。
动作主要有3个作用:
1。动作最重要的作用是为给定请求封装需要做的实际工作。
2。在从请求到视图的框架自动数据传输中作为数据的携带者。
3。动作必须帮助框架决定哪个视图应该呈现请求响应中返回的结果。
关于第二个作用,在这里说明一下Struts 1和Struts 2的一个区别点:
在Struts 1中,一个给定的动作类只有一个实例。如果Struts 2中依旧如此,就不能将动作自身作为请求的数据携带者。因为在如Web应用程序这样的多线程环境下,在我们看到的实例属性中存储数据就会有问题。Struts 2通过为每一个映射到这个动作的请求创建一个新的动作实例解决了这个问题。这个根本的区别使Struts 2对象成为每个请求专有的数据转移对象。
打包动作
若某个Web应用程序有两个不同的区域。有一些任何人都能使用的功能,例如注册一个用户,或查看公文包。也有一些安全的功能,主要是账户管理。使用Struts 2包很方便将这些动作组件分别组织在安全包和非安全包中。
例:安全包的声明
声明的包包含了这个应用程序中所有的安全动作。这些动作需要用户进行身份验证。扫一眼这些动作的名字就可以了解这些动作的功能。这里要确认正在删除图片的用户确实是当前图片的拥有者。把这些动作分组在一起可以共享对用户身份验证机制有用的组件声明。
struts-default包中的组件
注意其中的params的拦截器。如果正在困惑于从请求到动作组件的数据自动传输的神奇魔力,这就是答案。这个重要的params拦截器负责将数据从请求参数转移到动作的JavaBean属性,再也没有什么神奇的地方了。想了解更多内容,可以查看com.opensymphony.xwork2.interceptor.ParametersInterceptor这个类的代码。
实现动作
ActionSupport类
ActionSupport是一个提供了Action接口和其他几个有用接口的默认实现的便利类,提供了诸如数据验证,错误消息本地化等功能。
文件上传
fileUpload拦截器
为了接收上传文件,开发人员需要做的事情就是,在动作对象中追加与上表中的名字匹配的JavaBean属性。
jsp文件: