- 浏览: 665410 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
在说 Struts2 中的 Action 时,我们首先来说一下 Struts1 中的 ActionForm ,大家知道在 Struts1 中, ActionForm 本身是一个抽象类,若想将客户端提交的信息自动变成对象赋予到 Java 类中就必须提供一个自定义类,让它继承 ActionForm ,并提供相应的属性,然后自动 set 和 get 该 Formbean 总是与我们自定义的 JavaBean 有些重复,这就有点冗余的感觉。在 Struts2 中就取消了 ActionForm ,它直接用一个 Action 来实现 ActionForm 的功能,客户端提交的信息,如 name ,它会自动调用 Action 的 setName() 赋值到 name 属性中。
那么我们来说说 Struts2 中的 Action,Action 是 Struts2 的核心组件,是 MVC 模型中的粘贴剂,通过下图可以发现。
那么我们把 Action 与 Servlet 模式对比一下,如下图:
结合上图,我们对 Struts2 运行过程进行说明:
1 、 HttpRequest 被 struts2 的内置核心过滤器 Filterdispather 拦截
2 、 Struts 根据 url 查找并创建 Action 对象,并且将 Request Parameters 设置到 Action Property
3 、 Struts 调用 Action 的 execute 方法将调用业务逻辑并返回适合的结果视图名称
4 、 Struts 将 Action Property 封装为 ValueStack ,然后将 Request 转发到 JSP 页面
5 、 JSP 页面取得 ValueStack 值,并输出 HTML
注意:
invoke 方法和 Servlet 过滤器中调用 FilterChain.doFilter 方法类似,如果在当前拦截器后面还有其他的拦截器,则 invoke 方法就是调用后面拦截器的 intercept 方法,否则, invoke 会调用 Action 类的 execute 方法 ;
execute 方法又类似 Servlet 中的 service 方法
Action 三大作用:
1 、封装对请求的实际处理
Action 类似于 Servlet ,但封装性更高
Struts2 实现了 Action 与请求响应对象间的解耦,分离了 Action 与 Request/Response 的关联
2 、承载用户请求与结果视图的数据
Action 可以自动接收表单数据
在结果视图( JSP )中可以获取 Action 中的数据
3 、选择响应的结果视图
根据业务逻辑的处理结果选择适当的结果视图
Ok ,那来说说 Struts1 和 Struts2 中 Action 的不同:
1 、 Struts1.X 就只有一个 Action ,它是单例的,因此它里面不能放置存储状态性的东西;
2 、 Struts2 在默认情况下,每发送过来一次请求,它都会生成一个 Action 实例,因此 Struts2 的请求之间是独立的互不干扰的,因此它是线程安全的。
所以在 Struts2 中只要类包含返回 string 类型的 execute 的无参方法,那么他就可以作为 Struts2 的 Action 。
模型驱动:
要想实现模型驱动,必须要实现 ModelDriven 接口
ModelDrivenAction 类的执行流程是:
1 、调用 getModel() 方法得到 User 对象
2 、根据 JavaBean 的原则将客户端传过来的属性,一个一个的 set 到 User 对象的属性中
3 、将属性全部 set 完之后,再执行 execute() 方法。
一般不推荐使用模型驱动,而使用属性驱动。
Demo :
ModelDrivenAction.java:
public class ModelDrivenAction implements ModelDriven { public String execute() throws Exception { return SUCCESS; } public Object getModel() { return new Gangster(); } }
Gangster.java
public class Gangster implements Serializable { private String name; private int age; private String description; private boolean bustedBefore; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isBustedBefore() { return bustedBefore; } public void setBustedBefore(boolean bustedBefore) { this.bustedBefore = bustedBefore; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Jsp:
<s:form action="modelDrivenResult" method="POST" namespace="/modelDriven"> <s:textfield label="Gangster Name" name="name" /> <s:textfield label="Gangster Age" name="age" /> <s:checkbox label="Gangster Busted Before" name="bustedBefore" /> <s:textarea cols="30" rows="5" label="Gangster Description" name="description" /> <s:submit /> </s:form>
Action Chaining
<package name="public" extends="struts-default"> <!-- Chain creatAccount to login, using the default parameter --> <action name="createAccount" class="..."> <result type="chain">login</result> </action> <action name="login" class="..."> <!-- Chain to another namespace --> <result type="chain"> <param name="actionName">dashboard</param> <param name="namespace">/secure</param> </result> </action> </package> <package name="secure" extends="struts-default" namespace="/secure"> <action name="dashboard" class="..."> <result>dashboard.jsp</result> </action> </package>
属性驱动 Demo :
UserAction.java
package org.lxh.action; import java.text.DateFormat; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; /** * @author xudongwang 2011-5-12 * */ public class UserAction { private String message; private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String hello() { message = "欢迎使用Struts2!!,Now is [" + DateFormat.getDateInstance().format(new Date())+"]"; return ActionSupport.SUCCESS; } public void execute() { System.out.println("***********" + userName); } }
说明:
execute 方法是 Action 默认的执行方法,在方法内调用业务逻辑,封装请求和视图结果数据,返回结果视图;
同时上面的 return ActionSupport.SUCCESS; 可以改为 return "success"; 的这里的 success 要与 Struts.xml 中的 result 中的 name 对应,所以是小写的,同时其他的值还有: ERROR ,错误、 INPUT ,输入、 LOGIN ,登陆、 NONE ,空、 SUCCESS ,成功;
注意上面的 return "success"; 中的 success 是可以任意定义的,只要和 Struts.xml 中的 result 中的 name 对应即可
Struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="user" extends="struts-default"> <action name="helloworld" class="org.lxh.action.UserAction" method="hello"> <result name="success" type="plainText">/hello_struts2.jsp</result> </action> </package> </struts>
index.jsp:
<a href="helloworld.action">Hello World</a>
hello_struts2.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>... <s:property value="message"/>
说明:
<s:property value="message"/> 中的 message 是从 valueStack 中拉数据,而在 action 中的属性是 javaBean 属性保存数据,而 return SUCCESS 是控制字符串将去选择结果 resulst
补充:
Action 中的可选接口
1 、 com.opensymphony.xwork2.Action;
此接口定义了 Action 的默认规则;
a 、 Action 类中默认存在 execute 方法
b 、并不要求 Action 类对此接口显示的 implements
c 、可以使用 <action> 标签的 method 属性指定其他的处理方法名
此接口还定义了常用结果视图的名称:
a 、 ERROR ,错误
b 、 INPUT ,输入
c 、 LOGIN ,登陆
d 、 NONE ,空
e 、 SUCCESS ,成功
2 、 com.opensymphony.xwork2.ActionSupport
Action 的辅助工具类
通常由 Action 类 extends 此工具类
为 Action 类提供 Struts2 的常用功能
getText :用于国际化,根据 key 从资源文件中加载文本
validate :在 Action 类中重写此方法以实现数据校验
addActionError :添加一个 Action 错误
addFieldError :添加一个表单项错误
3 、 com.opensymphony.xwork2.ActionContext
Action 上下文工具类
提供访问各个 web 作用域键值 Map 的能力
getContext() :静态方法,获得当前 Action 对应的 ActionContext 对象
getApplication(): 获取 application 作用域的 map
getSession(): 获取 session 作用域的 map
getParameters(): 获取 request 表单的 map
getValueStack(): 取得 OGNL ValueState ,它实际上是打对 request 作用域 map 的封装
4 、 org.apache.struts2.ServletActionContext
ServletContext 辅助工具类
通过一系列静态方法提供对 Servlet 对象的访问
getRequest(): 获取 HttpServletRequest 对象
getResponse(): 获取 HttpServletResponse 对象
getServletContext(): 获取 ServletContext 对象
getRequest().getSession: 获取 HttpSession 对象
发表评论
-
Struts2标签与JSTL标签混用
2012-07-16 00:07 2955项目中遇到JSTL标签(需要standard.jar和jstl ... -
Struts2.2 OGNL
2012-06-29 01:54 1814OGNL ,作为Struts2 一大亮点,感觉也是 ... -
NoClassDefFoundError: org/apache/commons/io/FileUtils
2012-06-27 00:58 4664在做Struts Demo中出现: Exception ... -
Struts2.2 Tags
2012-06-28 00:48 1807Struts2 标签,这玩意没什么可说的,直接把以前做的 ... -
Struts2.2 Type Conversion
2012-06-26 23:51 2100Struts2 的转换器: ... -
Struts2.2 Localization
2012-06-25 23:55 1673今天来说说Struts2 ... -
Struts2.2 Validation
2012-06-11 00:59 2777数据验证的方式: ... -
Struts2.2 Results Types
2012-06-10 01:11 1646视图返回类型详细的信息可以查看 struts2-c ... -
Struts2.2 Interceptors
2012-06-08 01:52 1573AOP 中的 aspect ... -
Struts2.2 Configuration
2012-06-07 23:39 1965在前面的 Struts2.2 CURD Dem ... -
Struts2.2入门By CRUD
2012-06-06 21:49 2312SSH中Struts可谓是比较 ...
相关推荐
struts2.2学习笔记总结,action,拦截器,过滤器,国际化,struts.xml解析等的总结。
2.2 简单的HelloWorld示例 20 2.2.1 部署示例应用程序 20 2.2.2 探索HelloWorld应用程序 24 2.3 使用注解的HelloWorld 31 2.4 小结 33 第二部分 核心概念:动作、拦截器和类型转换 第3章 使用Struts 2动作 36 3.1 ...
struts2-junit-plugin-2.2.1.1.jar
S2-048 CVE-2017-9791 Struts 2.3.X http://127.0.0.1:8090/struts2-showcase/integration/saveGangster.action 影响范围非常小 S2-046 CVE-2017-5638 Struts 2.3.5-2.3.31,Struts 2.5-2.5.10 ...
2.6.2. Struts的强项........................................................................................................58 Struts in Action 中文版 Lastest Revised:10/14/2005 10:27:00 AM ...
Struts2 与Spring 结合,使用Spring 来管理Action 实例
2.2. 逻辑标记.16 2.2.1. 条件逻辑.17 2.2.2. 重复标记.18 2.2.3. 转发和重定向标记.19 2.3. HTML 标记20 2.3.1. 显示表单元素和输入控件.20 a) 表单标记.21 b) 按钮和取消标记.22 c) 复位和提交标记.22 d) 文本和...
1 Struts框架 3 ...2.1.2.2 重复标记 19 2.1.2.3 转发和重定向标记 20 2.1.3 HTML标记 21 2.1.3.1 显示表单元素和输入控件 21 2.1.3.2 显示错误信息的标记 25 2.1.3.3 其他HTML标记 26 2.1.4 模板标记 26
好了废话少说,进入正题,截止写稿时间struts最新版本是2.3,不过是12月12日发布的(2011年),为了稳定起见,我使用的版本是struts-2.2.3.1本文分为以下几个部分: 一、搭建开发和运行环境 1、到Apache下载Strut包...
9.2.2 Struts2Action范围属性文件国际化应用 187 9.2.3 Struts2临时范围属性文件国际化应用 188 9.3 用户主动选择国际化应用介绍 191 第10章 Struts2页面布局实现 194 10.1 sitemesh基本使用方法 194 10.2 sitemesh...
2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,Struts 2.5 to 2.5.16 此漏洞影响范围...S2-005 CVE-2010-1870 Struts 2.0.0-2.1.8.1 http://struts.apache.org/release/2.2.x/docs/s2-005.html 未添加,S2-016范围内
S2-048 CVE-2017-9791 Struts 2.3.X http://127.0.0.1:8090/struts2-showcase/integration/saveGangster.action 影响范围非常小 S2-046 CVE-2017-5638 Struts 2.3.5-2.3.31,Struts 2.5-2.5.10 ...
2.2. 为什么我们需要Struts .......................................................................................38 2.2.1. 退一进三........................................................................
2.Struts action向导: 根据jsp文件中的表单内容自动生成的form类和action类的代码. 并修改struts-config.xml配置文件. 3.直接创建action类,自动生成action类的代码.并修改struts-config.xml配置文件. 与2.2版相比...
2.2 Model规范 2.2.1 Model1规范 2.2.2 Model2规范 2.3 使用MVC的优劣 2.3.1 使用MVC模式的好处 2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第...
2.2 Struts的动作处理流程 15 2.3 拦截器 17 2.4 Struts配置文件 18 2.4.1 struts.xml文件 19 2.4.2 struts.properties文件 26 2.5 Struts应用程序示例 26 2.5.1 部署描述文件和Struts配置文件 27 2.5.2 动作...
4 1.3.2. 受控目录 5 2. 入门例子 5 2.1. 项目 5 2.2. 在WEB.XML中,配置FILTERDISPATCHER过滤器 6 2.3. 配置STRUTS.PROPERTIES 6 2.4. 编写一个简单的ACTION类 7 2.5. STRUTS.XML配置文件 8...
3.2. Struts2的Action调用业务逻辑 - 19 - 3.2.1. 登录Action--OpenIDLoginAction - 19 - 3.2.2. 进入的Action—FirstPageAction - 20 - 3.3. JSP页面 - 20 - 3.4. 运行示例 - 21 - 3.4.1. 登录 - 21 - 3.4.2. ...
2.2 Struts原理、开发及项目实施 8 2.3使用STRUST控制流 8 2.4讨论STRUTS的优缺点 9 2.5 Struts入门经验 9 2.6用strtus制作登陆页面: 9 第3章Struts 基础学习 9 3.1Struts标记库 9 3.2Struts框架基础篇 9 3.3Struts...