ActionContext

每一个请求的处理都在一个独立的线程中。每一个线程都有一个ActionContext对象。它包括了ValueStack和HttpServletRequest的东西。

Struts把全部的变量统一放在一个方便的地方。而不是将数据传来传去,这个东西就是ValueStack。它贯穿于整个处理流程,所以拦截器和视图层都能够操作ValueStack中的内容。一般通过OGNL间接操作,而不是直接操作。每一个请求都会创建一个新的Action,因此不会有多线程冲突的问题。

动作

动作的作用就是封装业务逻辑、传输数据、决定响应视图。

动作能够看成是一个JavaBean。框架会将请求中的參数依照JavaBean规范填入到Action。之后在视图层能够读取Action中的数据。这就是传输数据的过程。为了简化问题,能够在Action中添加一个JavaBean类型的属性,这样视图层就能够将数据直接填到一个对象中,而不是填到动作中。另外能够让动作实现ModelDriven接口。这个接口的作用就是将全部的參数都定向到getModel这种方法中。

getModel须要返回一个JavaBean。

public class TestAction {
private Student student; // 返回一个JavaBean对象,这样就能够让參数填入对象
public Student getStudent() {
return student;
}
}

文件的上传。文件的上传是通过FileUploadInterceptor实现的。文件字段能够看成三个请求參数。假设表单中的字段名为XXX。那么Action会接收到三个參数:

  • XXX。

    File类型的数据,表示被上传的文件。

  • XXXContentType。文件的内容类型。
  • XXXFileName。文件储存在server上的文件名称。

对于多个文件,仅仅要将File改成File数组、String改成String数组就可以。在一次请求结束之后,文件会被拦截器删除。

框架对动作的父类没有不论什么要求,仅仅要实现execute方法就可以。

可是这样不能直接使用框架自带的便捷方法。因此能够引入ActionSupport基类。它的作用有数据验证、错误消息本地化等。

数据验证。DefaultWorkflowInterceptor会调用Action中的validate方法。开发人员能够复写这种方法来检查数据是否正确。假设发现错误。能够调用addFieldError(field,message)这种方法加入错误。框架检測到错误之后会跳转到input页面让用户又一次输入表单。ActionSupport还支持消息的本地化。首先要定义ActionName.properties,然后通过getText方法就能够获取。

以下介绍包的概念。

首先打个例如。将Struts中的动作比作Java中的类。

我们知道Java类一般都会放在一个包中。

Struts也会将动作放在包中。包的定义在struts.xml文件里,以下是一个包的演示样例:

<package name="helloWorld" namespace="/my/path/helloWorld" extends="struts-default">
<action name="Hello">
<result>/my/hello.jsp</result>
</action>
<action name="World">
<result>/my/world.jsp</result>
</action>
</package>

默认namespace和根namespace的差别。

默认namespace在定义的时候事实上是一个空的字符串(不指定namespace就可以)。而根空间在定义的时候是“/”。举个样例,有一个请求http://localhost/hello/world/nice.action,框架首先会在/hello/world这个空间中找一个名为nice的动作。假设找不到,就会在默认命名空间中查找这个动作。

Struts2动作的更多相关文章

  1. 如何删除Struts2动作的后缀扩展名

    在Struts2中,所有动作类有一个默认的后缀 .action 扩展. 例如, <struts> <package name="default" namespac ...

  2. Struts2学习笔记--Struts例子及开发流程

    参考资料:http://blog.csdn.net/hntyzgn2010/article/details/5547753 http://chenlh.iteye.com/blog/464341 入门 ...

  3. Struts2 Action/动作

    动作是Struts2框架的核心,因为他们的任何MVC(模型 - 视图 - 控制器)框架.每个URL将被映射到一个特定的动作,它提供了来自用户的请求提供服务所需的处理逻辑. 但动作也提供其他两个重要的能 ...

  4. Struts2 In Action笔记_页面到动作的数据流入和流出

    因为回答百度知道的一个问题,仔细查看了<Struts2 In Action>,深入细致的看了 “数据转移OGNL 和 构建视图-标签”,很多东西才恍然大悟. 一直觉得国外写的书很浮,不具有 ...

  5. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  6. Struts2框架基础

    Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...

  7. Struts2拦截器的执行过程浅析

    在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...

  8. Struts2入门(二)——配置拦截器

    一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...

  9. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

随机推荐

  1. Windows环境下32位汇编语言程序设计(典藏版)

    <Windows环境下32位汇编语言程序设计(典藏版) > 基本信息 作者: 罗云彬 出版社:电子工业出版社 ISBN:9787121207594 上架时间:2013-7-8 出版日期:2 ...

  2. OpenCV支持向量机SVM对线性不可分数据的处理

    支持向量机对线性不可分数据的处理 目标 本文档尝试解答如下问题: 在训练数据线性不可分时,如何定义此情形下支持向量机的最优化问题. 如何设置 CvSVMParams 中的参数来解决此类问题. 动机 为 ...

  3. 十招让Ubuntu 16.04用起来更得心应手

    Ubuntu 16.04是一种长期支持版本(LTS),是Canonical承诺发布五年的更新版.也就是说,你可以让这个版本在电脑上运行五年!这样一来,一开始就设置好显得特别重要.你应该确保你的软件是最 ...

  4. idea 设置jetty进程jvm参数

    /** * MyEclipse6.5通过Jetty跑Web应用时提示OutOfMemoryError: PermGen space的解决办法 * @see ---------------------- ...

  5. [HTML5] Build Flexible HTML with HTMLTemplates using Slots and Web Components

    HTMLTemplates are part of the web components specification. In this lesson we will learn what are HT ...

  6. Node.js 向一个文件添加内容

    最简方案: fs.appendFile('message.txt', 'data to append', function (err) { }); 参考文档: http://www.codeweblo ...

  7. maven install时报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test

    事故现场: 解决办法: 一是命令行, mvn clean package -Dmaven.test.skip=true 二是写入pom文件, <plugin> <groupId> ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何声明定时器,使用定时器TON模块 TC3

    TON功能块功能: 当输入为高电平时,计时器开始计时,CV表示计时器计时的当前值,而PV则是计时的目标值,当CV的值等于PV的值时,输出置1.     在主程序接下去的地方按下F2并添加TON功能块. ...

  9. .Net Framemwork 之 值类型和引用类型的存储

    C#把数据类型分为两种:值类型 和 引用类型.值类型存储在堆栈中,而引用类型存储在托管堆上. 一.值类型和引用类型变量的存储 首先,变量是存储信息的基本单元,而对于计算机内部来说,变量就相当于一块内存 ...

  10. sublime HtmlPrettify

    用sublime都快一年多了,终于找到一款称心如意的format工具,可以同时格式化 html css js. HTML-CSS-JS Prettify 如果安装的时候出现问题,多调试调试,改改参数