struts框架

Struts有三个重要的组成部分:
Action Bean
ActionServlet
ActionForm Bean 和定制的标记
Action Bean和ActionServlet struts提供了一个单独的ActionServlet(org.apache.struts.action.ActionServlet)
来处理所有的浏览器请求。这种类型的框架我们称为FrontController模式,每个浏览器
的请求都有Struts的Action子类(org.apache.strtus.action.Action)的子类来处理
每个浏览器的请求都被映射为strtus-config.xml文件内的一个Action子类。ActionServlet在
初始化期间加载这些映射。要配置web项目使其把所有的浏览器请求都传递给ActionServlet
请把所有以.do结尾的URI(例如:.do)都映射为web描述符中的ActionServlet。然后
你可以在Strtus-config.xml文件中为各个请求URI(比如:/submit.do)提供实际的action映射。

ActionForm Bean 浏览器请求时可带参数。当用户提交html表单后,Struts框架就把
参数放在一个org.apache.struts.action.ActionFrom Bean中,你也可以用ActionFrom Bean
把缺省值预先植入一个表单,这些缺省值可从数据库或其他的后端系统获的。如果用户在表单中输入了
不正确的值,ActionForm可以进行验证。你可以用以前的输入重新显示表单。

ActionServlet和Action类是MVC模型中控制器的核心,改控制器负责处理用户的请求,把请求路由到业务
逻辑,并选择视图来响应用户。表单提交给submit.do后,Struts ActionServlet会
根据struts-config.xml文件中的配置选择正确的action类来用。

Struts Action 子类负责处理用户数据。在这个示例中,创建一个名为 SubmitAction 的 Struts
Action 子类。它由诸如读和处理表单数据之类的操作组成。每一个表单都和该 Struts
ActionForm 子类的一个实例关联在一起。请创建这个继承 ActionForm 的表单类。
SubmitForm 是 ActionForm 的一个子类,它是用域的 getter 和 setter 方法创建的。getter
和 setter 方法在 ActionForm 子类中都是必须有的。

SubmitForm 怎样发挥作用? 每一个 Struts Action 类都必须和一个 Struts ActionForm 类
关联在一起。您可以在 WebSphere Studio 中的 struts-config.xml 编辑器的 FormBean 页面
中定义 SubmitForm 类。然后可以把它与 struts-config.xml 文件中的 SubmitAction 映射关
联在一起。一个请求提交后,ActionServlet 把从 Web 浏览器上的实际表单中得到的数据自
动植入 SubmitForm。在 SubmitAction 类中,用 SubmitForm f = (SubmitForm) form 来访问
表单数据。

struts框架对于MVC的实现:
控制器-->
Controller:控制器的作用是从客户端接受请求,并且选择执行相应的业务逻辑,然后把响
应结果送回到客户端。在Struts 中Controller 功能由图中ActionServlet 和ActionMapping 对
象构成:核心是一个Servlet 类型的对象ActionServlet,它用来接受客户端的请求。
ActionServlet 包括一组基于配置的ActionMapping 对象,每个ActionMapping 对象实现了一
个请求到一个具体的Model 部分中Action 处理器对象之间的映射。
模型-->
Model: MVC 系统中的Model 部分从概念上可以分为两类――系统的内部状态,和改
变系统状态的动作。Struts 为Model 部分提供了Action 和ActionForm 对象:所
有的Action 处理器对象都是开发者从Struts 的Action 类派生的子类。Action
处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的
View 组件以产生响应。Struts 提供的ActionForm 组件对象,它可以通过定义属
性描述客户端表单数据。开发者可以从它派生子类对象,利用它和Struts 提供的自定
义标记库结合可以实现对客户端的表单数据的良好封装和支持,Action 处理器对象可
以直接对它进行读写,而不再需要和request、response 对象进行数据交互。通过
ActionForm 组件对象实现了对View 和Model 之间交互的支持。Struts 通常建议
使用一组JavaBean 表示系统的内部状态,根据系统的复杂度也可以使用像Entity
EJB和 Session EJB 等组件来实现系统状态。Struts 建议在实现时把"做什么"
(Action)和"如何做"(业务逻辑)分离。这样可以实现业务逻辑的重用。
视图-->
View:Struts 应用中的View 部分是通过JSP 技术实现的。Struts 提供了自定义
的标记库可以使用,通过这些自定义标记可以非常好地和系统的Model 部分交互,通
过使用这些自定义标记创建的JSP 表单,可以实现和Model 部分中的ActionForm
的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显
示功能。

Struts 框架的处理流程清楚的体现了MVC 系统的特点,Struts Controller ActionServlet
处理客户请求,利用配置的ActionMapping 对象把请求映射到Action 处理器对象
进行处理。Action 处理对象访问ActionForm 中的数据,处理和响应客户请求,它
还调用后台的Bean 组件,这些组件封装了具体的业务逻辑。Action 处理器对象根
据处理结果通知Controller,Controller 进行下一步的处理。

struts的开发流程:
3.利用Struts 框架开发MVC 系统要做的工作
由于Struts 已经为我们提供了一个非常好的MVC 框架,我们利用Struts 开发MVC
系统时可以大大加快开发的速度。在开发时可以采用的一个开发流程如下:
收集和定义应用需求。
基于数据采集和显示的原则定义和开发"屏幕显示"需求 。
为每一个"屏幕显示"定义访问路径。
定义ActionMappings 建立到应用业务逻辑之间的联系。
开发满足"屏幕显示"需求的所有支持对象。
基于每一个"屏幕显示"需求提供的数据属性来创建对应的ActionForm 对象
开发被ActionMapping 调用的Action 对象。
开发应用业务逻辑对象 (Bean,EJB,等等)。
对应ActionMapping 设计的流程创建JSP 页面。
建立合适的配置文件struts-config.xml , web.xml。
开发/测试/部署
具体在使用Struts 框架时,对应各个部分的开发工作主要包括:
Model 部分:采用JavaBean 和EJB 组件,设计和实现系统的业务逻辑。根据不同的
请求从Action 派生具体Action 处理对象。完成"做什么"的任务来调用由Bean 构成
的业务组件。创建由ActionForm 的派生类实现对客户端表单数据的封装。
Controller 部分:Struts 为我们提供了核心控制部分的实现。我们只需要配置
ActionMapping
对象
View 部分:为了使用Model 中的ActionForm 对象,我们必须用Struts 提供的自
定义标记创建HTML 表单。利用Struts 提供的自定义标记库编写用户界面把应用逻辑
和显示逻辑分离。Struts 框架通过这些自定义标记建立了View 和Model 之间的联
系。Struts 的自定义标记还提供了很多定制页面的功能。

写struts组件时应注意的一些原则:
当你在写你的ActionForm beans 时,记住以下的原则:

ActionForm 接口本身不需要特殊的实现方法。它是用来标识这些特定的beans 在整
个体系结构中的作用。典型情况下,一个ActionForm bean 只包括属性的get 方法
和set 方法,没有商业逻辑。
通常在一个ActionForm bean 中只有很少的输入验证逻辑。这样的beans 存在的主
要理由是保存用户为相关的表单所输入的大部分近期值 -- 甚至在错误被检测到时--
这样同样的页面可以被重建,伴随有一组出错信息,这样用户仅仅需要纠正错误的字段。
用户输入的验证应该在 Action 类中执行(如果是很简单的话),或者在适当的商业
逻辑beans 中执行。为每个表单中出现的字段定义一个属性(用相关的getXxx()和
setXxx()方法)。字段名和属性名必须按照JavaBeans 的约定相匹配。例如,一个
名为 username 的输入字段将引起setUsername() 方法被调用。
你应该注意一个“表单”在这里讨论时的意义并不必须对应于用户界面中的一个单独的
JSP页面。在很多应用程序中一个“表单”(从用户的观点)延伸至多个页面也是很平常
的。想想看,例如,通常在安装新的应用程序时使用的导航安装程序的用户界面。
Struts 鼓励你定义一个包含所有字段属性的单独的ActionForm bean。不管字段实
际上是显示在哪个页面上。同样的,同一表单的不同的页面应该提交到相同的Action
类。如果你遵照这个建议,在大多数情况下,页面设计者可以重新组织不同页面中的字
段而不需要改变处理逻辑。

2.4 系统状态Beans
系统的实际状态通常表示为一组一个或多个的JavaBeans 类,其属性定义当前状态。例如,
一个购物车系统包括一个表示购物车的bean,这个bean 为每个单独的购物者维护,这个bean
中包括(在其它事物之中)一组购物者当前选择购买的项目。分别地,系统也包括保存用户
信息(包括他们的信用卡和送货地址)、可获得项目的目录和它们当前库存水平的不同的
beans。
对于小规模的系统,或者对于不需要长时间保存的状态信息,一组系统状态beans 可以包含
所有系统曾经经历的特定细节的信息。或者经常是,系统状态beans 表示永久保存在一些外
部数据库中的信息(例如CustomerBean 对象对应于表 CUSTOMERS 中的特定的一行),在
需要时从服务器的内存中创建或清除。在大规模应用程序中,Entity EJBs 也用于这种用途。
2.5 商业逻辑Beans
你应该把你的应用程序中的功能逻辑封装成对为此目的设计的JavaBeans 的方法调用。这些
方法可以是用于系统状态beans 的相同的类的一部分,或者可以是在专门执行商业逻辑的独
立的类中。在后一种情况下,你通常需要将系统状态beans 传递给这些方法作为参数处理。
为了代码最大的可重用性,商业逻辑beans 应该被设计和实现为它们不知道自己被执行于
web 应用环境中。如果你发现在你的bean 中你必须import 一个 javax.servlet.* 类,你就把
这个商业逻辑捆绑在了web 应用环境中。考虑重新组织事物使你的 Action 类(Controller
任务的一部分,在下面描述)翻译所有从HTTP 请求中请求被处理为对你的商业逻辑beans
属性set 方法调用的信息,然后可以发出一个对 execute() 的调用。这样的一个商业逻辑类
可以被重用在除它们最初被构造的web 应用程序以外的环境中。
依赖于你的应用程序的复杂度和范围,商业逻辑beans 可以是与作为参数传递的系统状态
beans 交互作用的普通的JavaBeans,或者使用JDBC 调用访问数据库的普通的JavaBeans。
而对于较大的应用程序,这些beans 经常是有状态或无状态的EJBs。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值