Struts2动作
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动作的更多相关文章
- 如何删除Struts2动作的后缀扩展名
在Struts2中,所有动作类有一个默认的后缀 .action 扩展. 例如, <struts> <package name="default" namespac ...
- Struts2学习笔记--Struts例子及开发流程
参考资料:http://blog.csdn.net/hntyzgn2010/article/details/5547753 http://chenlh.iteye.com/blog/464341 入门 ...
- Struts2 Action/动作
动作是Struts2框架的核心,因为他们的任何MVC(模型 - 视图 - 控制器)框架.每个URL将被映射到一个特定的动作,它提供了来自用户的请求提供服务所需的处理逻辑. 但动作也提供其他两个重要的能 ...
- Struts2 In Action笔记_页面到动作的数据流入和流出
因为回答百度知道的一个问题,仔细查看了<Struts2 In Action>,深入细致的看了 “数据转移OGNL 和 构建视图-标签”,很多东西才恍然大悟. 一直觉得国外写的书很浮,不具有 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Struts2框架基础
Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ...
- Struts2拦截器的执行过程浅析
在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...
- Struts2入门(二)——配置拦截器
一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...
- SSH面试题(struts2+Spring+hibernate)
struts2 + Spring +hibernate Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory ...
随机推荐
- 【js】js数组置空的三种方式
方式1: var arr = new Array(1,2,3); alert(arr); arr.splice(0, arr.length); alert(arr); 方式2: var arr = n ...
- 查看Ubuntu服务器的版本信息
第一种: uname -a 第二种: cat/etc/issue 第三种: lsb_release -a 这个查看的信息更加详细 使用命令:cat /proc/version 查看 proc目录下记录 ...
- iOS:2015年07月最新苹果IOS上架App Store商店步骤
苹果官方在2015年05-06月开发者中心进行了改版,网上的APP Store上架大部分都不一样了,自己研究总结一下,一个最新的上架教程以备后用. 原文地址:http://www.16css.com/ ...
- python之epoll服务器源码分析
#!/usr/bin/env python # -*- coding: utf8 -*- import socket, select EOL1 = b'/r/n' EOL2 = b'/r/n/r/n' ...
- app store 注册账号生成证书上传app完整的教程
app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...
- Mapreduce报错:java.lang.ClassNotFoundException: Class Mapper not found
mapreduce找不到mapper类 解决方法: 开始自己用的是mapreduce自己打包的一种方法: job.setJarByClass(StandardJob.class); 但这样一直在报错: ...
- shell遍历文件夹并执行命令
背景: 有一个源码包里面包含很多子目录和makefile,打包后的压缩包太大,需要将make生成的所有二进制文件删除然后再打包. 需求: 因此,要求在制定目录的所有递归子目录中执行make clean ...
- 如何在 Ubuntu 上搭建网桥
导读作为一个 Ubuntu 16.04 LTS 的初学者.如何在 Ubuntu 14.04 和 16.04 的主机上搭建网桥呢?顾名思义,网桥的作用是通过物理接口连接内部和外部网络.对于虚拟端口或者 ...
- android开发笔记之Volley (1)
1. volley的简介 Volley is an HTTP library that makes networking for Android apps easier and most import ...
- HTML+JavaScript实现链式运动特效
在学习js的过程中,发现这家伙做特效真是不错,尽管说眼下水平还不够,只是也能写点简单的效果. 今天分享一个简单的运动框架.然后利用这个框架实现简单的链式运动特效. 1.move.js 在运动框架中.主 ...