- 浏览: 676918 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (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 2996项目中遇到JSTL标签(需要standard.jar和jstl ... -
Struts2.2 OGNL
2012-06-29 01:54 1856OGNL ,作为Struts2 一大亮点,感觉也是 ... -
NoClassDefFoundError: org/apache/commons/io/FileUtils
2012-06-27 00:58 4733在做Struts Demo中出现: Exception ... -
Struts2.2 Tags
2012-06-28 00:48 1851Struts2 标签,这玩意没什么可说的,直接把以前做的 ... -
Struts2.2 Type Conversion
2012-06-26 23:51 2138Struts2 的转换器: ... -
Struts2.2 Localization
2012-06-25 23:55 1720今天来说说Struts2 ... -
Struts2.2 Validation
2012-06-11 00:59 2826数据验证的方式: ... -
Struts2.2 Results Types
2012-06-10 01:11 1696视图返回类型详细的信息可以查看 struts2-c ... -
Struts2.2 Interceptors
2012-06-08 01:52 1628AOP 中的 aspect ... -
Struts2.2 Configuration
2012-06-07 23:39 2007在前面的 Struts2.2 CURD Dem ... -
Struts2.2入门By CRUD
2012-06-06 21:49 2369SSH中Struts可谓是比较 ...
相关推荐
Struts2.2.3.1是Apache软件基金会下的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架是MVC(模型-视图-控制器)设计模式的实现,极大地简化了开发流程,并且提供了丰富的功能来处理HTTP请求、表单提交...
Struts2.2 必须的 JAR 包是开发基于Apache Struts 2.2框架的应用程序所需的核心库集合。Struts 2是一个流行的Java开源MVC(模型-视图-控制器)框架,用于构建企业级Web应用程序。它简化了开发流程,提供了一种结构化...
本笔记主要探讨了Struts2.2的核心概念,包括Action、拦截器、过滤器、国际化以及struts.xml配置文件的解析,尤其是类型转换的细节。 在Struts2.2中,每个HTTP请求都会创建一个Action对象,与Servlet不同,Servlet在...
Struts2.2到Struts2.3的升级是一个重要的更新过程,涉及到多个方面的改动和优化,包括性能提升、安全增强以及新特性的引入。在升级过程中,我们需要关注以下几个关键知识点: 1. **依赖包的更新**:Struts2.3.32...
Struts2.2 JAR包是Java开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个开源的MVC(Model-View-Controller)框架,用于构建基于Java的Web应用程序。这个框架旨在提供一种更高效、更灵活的...
标题 "spring3.0+struts2.2+hibernate3.3集成.rar" 提供了一个关于企业级Java应用开发的集成框架的信息。描述中同样强调了这个主题,暗示了压缩包内可能包含了一个演示或教程,讲解如何将这三个流行的技术——Spring...
struts2-bjsxt.doc 和 Struts2-shengsiyuan.doc 可能详细解释了Struts2.2的各个方面,包括但不限于Action配置、拦截器使用、结果映射、异常处理、国际化支持等内容。阅读这些文档可以帮助开发者更深入地了解Struts2...
对于Struts2.2.3.1版本的API,我们可以通过以下几大方面来探讨其核心概念和功能: 1. **Action类**:在Struts2中,Action类是业务逻辑处理的核心,它继承自com.opensymphony.xwork2.ActionSupport类。开发者需要在...
Struts2.2.1.1源码是一个重要的开源框架,它是Apache软件基金会下的一个项目,主要用于构建基于Java的企业级Web应用程序。这个源码版本包含了Struts2框架的核心功能和其他相关组件,为开发者提供了深入理解其工作...
Struts2.2.4.1 是一个流行的Java Web应用程序框架,它基于Model-View-Controller(MVC)设计模式,用于构建动态、数据驱动的Web应用。此完整资源包包含了许多必要的组件和文档,帮助开发者高效地开发企业级应用。 ...
Struts2.2和Spring3.0是两个非常重要的Java Web开发框架,它们在企业级应用中被广泛使用。这个"Struts2.2+Spring3JAR包"显然是一个集合了这两个框架所需库文件的压缩包,方便开发者进行快速集成和开发。 Struts2是...
在本项目中,“spring+struts2.2+JPA”是一个典型的Java Web应用程序架构,它结合了Spring框架、Struts 2.2框架以及Java Persistence API(JPA)来构建一个高效、灵活且可扩展的后端系统。让我们详细探讨一下这三个...
Struts 2.2.3.1 是一个流行的开源MVC框架,用于构建企业级Java Web应用程序。这个压缩包“struts-2.2.3.1-lib.zip”包含了Struts 2框架的库文件,这些文件对于理解和使用Struts 2框架至关重要。下面将详细解释其中...
1. **Action与结果**:Struts2.2中,Action类不再直接返回视图,而是返回一个Result对象,使得Action与视图之间的耦合度降低,增强了灵活性。 2. **拦截器(Interceptors)**:Struts2的核心组件之一,可以实现事务...
通过阅读Struts2.2.1.1.chm帮助文档,开发者可以深入了解这些特性的具体使用方法,包括Action配置、拦截器编写、结果类型定义、OGNL表达式运用等。此外,文档还包含详细的API参考,对每一个类和接口的功能、方法进行...
Struts2.2.3.1 API文档是一个重要的资源,对于深入理解和开发基于Struts2框架的应用程序至关重要。Struts2是一个流行的Java开源MVC框架,用于构建企业级Web应用程序。2.2.3.1是该框架的一个版本,包含了众多的改进和...
Struts2.2.1.1是Apache软件基金会下的一个流行的Java Web开发框架,用于构建MVC(模型-视图-控制器)架构的应用程序。这个框架极大地简化了Java Web应用程序的开发过程,提供了丰富的功能和良好的可扩展性。在...
在Struts2.2.1.1中,你可以自定义Action类,继承自`org.apache.struts2.dispatcher.ng.ExecuteOperations`或实现`com.opensymphony.xwork2.Action`接口。 3. **配置文件**:Struts2的配置通常在`struts.xml`文件中...
《Spring2.5+Struts2.2+Hibernate3.2综合指南》 在软件开发领域,Spring、Struts和Hibernate这三大框架是Java企业级应用的基石,它们各自负责不同的核心职责,协同工作,构建出高效且可扩展的系统。本资料集合了...
标题“Spring之Spring2.5集成Struts2.2”涉及到的是在Web开发中整合两个非常流行的开源框架——Spring和Struts2的过程。这个过程旨在利用Spring的强大IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...