70
2004-2-10 struts学习笔记 1 Struts Struts 学习笔记 学习笔记 By: 张红宇 [email protected]

Struts学习笔记

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Struts学习笔记

2004-2-10 struts学习笔记 1

StrutsStruts 学习笔记学习笔记StrutsStruts 学习笔记学习笔记

By:张红宇[email protected]

Page 2: Struts学习笔记

2004-2-10 struts学习笔记 2

Struts 学习笔记Struts 框架根据资料整理得 struts 的基本知识个人思考个人学习和应用 struts 的一些心得、思考

Page 3: Struts学习笔记

2004-2-10 struts学习笔记 3

Struts 框架Struts 简介MVC 模式Struts 流程Struts 核心基于 struts 的开发流程Struts 的学习资料

Page 4: Struts学习笔记

2004-2-10 struts学习笔记 4

个人思考Struts 的优点Tiles国际化和本地化一个 struts 的小例子Struts + Hibernate 的 J2EE 架构

HibernateJ2EEStruts + Hibernate 的 J2EE 架构

总结

Page 5: Struts学习笔记

2004-2-10 struts学习笔记 5

Struts 简介• Struts 最早于 2002 年 5 月作为 Apache Jakarta 项目

的组成部分问世。项目的创立者希望通过对该项目的研究,改进和提高 Java Server Pages (JSPs) 、 Servlet 、标签库以及面向对象的技术水准。像其他的 Apache 组织的项目一样, Struts 也是开放源码项目。当前最高发行版本为 Struts1.1 ,可以到 http://jakarta.apache.org/struts下载。

• Struts 是一种 web 框架( framework ),一个比较好的 MVC 框架,提供了对开发 MVC 系统的底层支持,它的目的是为了帮助你减少在运用 MVC 设计模型来开发Web 应用的时间。

Page 6: Struts学习笔记

2004-2-10 struts学习笔记 6

MVC 模式Sun 公司在 jsp 早期制定了两种规范,称为model1 和 model2 。• Model 1

JSP 为中心的开发模型 。• Model 2

基于 MVC 的模型。• Struts 与 MVC

Page 7: Struts学习笔记

2004-2-10 struts学习笔记 7

JSP Model 1• 以 JSP 为中心的开

发模型。• 在 JSP 页面中同时

实现显示、业务逻辑和流程控制,从而可以快速地完成应用开发。

• 适于小项目的开发。

Page 8: Struts学习笔记

2004-2-10 struts学习笔记 8

JSP Model 1• Model 1 的不足:1 、不利于应用扩展和更新。 应用的实现一般是基于过程的 , 一组 JSP 页面实现一个业务流程,如果要进行改动,必须在多个地方进行修改。 2 、不利于应用系统业务的重用和改动。 应用不是建立在模块上的,业务逻辑和表示逻辑混合在 JSP 页面中没有进行抽象和分离。

Page 9: Struts学习笔记

2004-2-10 struts学习笔记 9

JSP Model 2• Model 2 表示的是基于

MVC 模式的框架。• MVC 是 Model - View

- Controller 的简写。• 这些组件可以进行交互

和重用。从而弥补了 Model 1 的不足。

Page 10: Struts学习笔记

2004-2-10 struts学习笔记 10

MVC• “Model” 代表的是应用的业务逻辑(通过 Ja

vaBean , EJB组件实现)• “View” 是应用的表示层(由 JSP 页面产生)• “Controller” 是提供应用的处理过程控制

(一般是一个 Servlet ) 通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,以实现代码重用和易于修改。

Page 11: Struts学习笔记

2004-2-10 struts学习笔记 11

MVC• MVC 组件类型的关系和功能:

Page 12: Struts学习笔记

2004-2-10 struts学习笔记 12

Struts 与 MVC• Model2容易使系统出现多个 Controller ,并且对页面导航的处理比较复杂。有些人觉得 Model2 不够好,于是 Craig R. McClanahan 2000 年 5 月 提交了一个 WEB framework给 Java Community。这就是后来的 Struts 。

• Struts 其实就是 Model2 基础上实现的一个 MVC 架构。它只有一个中心控制器。

Page 13: Struts学习笔记

2004-2-10 struts学习笔记 13

Struts 与 MVC• Struts 提供了 Controller 组件并且整合了其

它技术来实现 Model 和 View 。例如,对于 Model , struts 可以使用标准数据访问技术如JDBC 和 EJB,也可以使用第三方工具,如 Hibernate 、 iBATIS 、 O/R桥。至于 View ,struts 支持 jsp ,包括 JSTL( JSP Standard Tag Library)和 JSF(Java Server Faces) ,也可以是 Velocity模板、 XSLT ( the Extensible Stylesheet Language Transformations )及其它表示系统。

Page 14: Struts学习笔记

2004-2-10 struts学习笔记 14

Struts 与 MVC• Controller :控制器的作用是从客户端接受请求,并且选择执行相应的业务逻辑,然后把响应结果送回到客户端。在 Struts 中 Controller功能由 ActionServlet 和 ActionMapping对象构成:核心是一个 Servlet类型的对象 ActionServlet ,它用来接受客户端的请求。 ActionServlet包括一组基于配置的 ActionMapping 对象,每个 ActionMapping 对象实现了一个请求到一个具体的 Model 部分中 Action处理器对象之间的映射。

Page 15: Struts学习笔记

2004-2-10 struts学习笔记 15

Struts 与 MVC• Model : MVC 系统中的 Model 部分从概念

上可以分为两类――系统的内部状态,和改变系统状态的动作。 Struts 为 Model 部分提供了 Action 和 ActionForm 对象:所有的 Action处理器对象都是开发者从 Struts 的 Action类派生的子类。 Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的 View 组件以产生响应。

Page 16: Struts学习笔记

2004-2-10 struts学习笔记 16

Struts 与 MVC• Struts 提供的 ActionForm 组件对象,它可以

通过定义属性描述客户端表单数据。开发者可以从它派生子类对象,利用它和 Struts 提供的自定义标记库结合可以实现对客户端的表单数据的良好封装和支持, Action处理器对象可以直接对它进行读写,而不再需要和 request 、 response 对象进行数据交互。通过 ActionForm 组件对象实现了对 View 和 Model之间交互的支持。 Struts 通常建议使用一组 JavaBean 表示系统的内部状态,根据系统的复杂度也可以使用像 Entity EJB 和 Session EJB等组件来实现系统状态。 Struts 建议在实现时把 "做什么 "( Action )和 "如何做 "(业务逻辑)分离。这样可以实现业务逻辑的重用。

Page 17: Struts学习笔记

2004-2-10 struts学习笔记 17

Struts 与 MVC• View : Struts 应用中的 View 部分是通过 JS

P 技术实现的。 Struts 提供了自定义的标记库可以使用,通过这些自定义标记可以非常好地和系统的 Model 部分交互,通过使用这些自定义标记创建的 JSP 表单,可以实现和 Model 部分中的 ActionForm 的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。

Page 18: Struts学习笔记

2004-2-10 struts学习笔记 18

Struts 与 MVC• 也有人认为 Action 也是控制器的一部分

Page 19: Struts学习笔记

2004-2-10 struts学习笔记 19

Struts 简介MVC 模式Struts 流程Struts 核心基于 struts 的开发流程Struts 的学习资料

Page 20: Struts学习笔记

2004-2-10 struts学习笔记 20

Struts 流程

Page 21: Struts学习笔记

2004-2-10 struts学习笔记 21

Struts 流程

1. 视图中的 JSP 由于用户的交互作用而生成一个请求( Struts 定制标记库来构建 JSP )

2. Struts ActionServlet 接收请求。这个 ActionServlet 使用配置文件来确定要对请求执行的操作,从而调用 Struts Action 类合适的特定于应用程序的子类。此外,它必须从请求生成被发送到这个操作的表单 bean 。

3. Action 子类与永久存储器和组成模型的一些应用程序交互――调用业务模块接口,返回结果。

4. ActionServlet接受 Action 的 Execute 方法的返回值 ActionForward ,确定显示结果的合适的视图组件。

5. ActionServlet 将这个信息转发给操作所选择的视图组件(一般来说是 JSP ),然后这个组件将结果显示出来。

Page 22: Struts学习笔记

2004-2-10 struts学习笔记 22

Struts 流程图

Page 23: Struts学习笔记

2004-2-10 struts学习笔记 23

Struts 核心组件ActionServlet 控制器 Action 包含事务逻辑 ActionForm 显示模块数据 ActionMapping 帮助控制器将请求映射到操作 ActionForward 用来指示操作转移的对象 ActionError 用来存储和回收错误 Struts 标记库 可以减轻开发显示层次的工作

Page 24: Struts学习笔记

2004-2-10 struts学习笔记 24

Struts 核心组件

Struts 组件结构图

Page 25: Struts学习笔记

2004-2-10 struts学习笔记 25

Struts 核心组件

Page 26: Struts学习笔记

2004-2-10 struts学习笔记 26

Struts 核心• ActionServlet 是一个 FrontController ,它

是一个标准的 Servlet ,是 javax.servlet.http.HttpServlet类的扩展。它将 request转发给RequestProcessor 来处理

• RequestProcessor 根据提交过来的 url ,如*.do ,从 ActionMapping 中得到相应的 ActionForm 和 Action 。然后将 request 的参数对应到 ActionForm 中,进行 form验证。如果验证通过则调用 Action 的 execute() 方法来执行 Action ,最终返回 ActionFoward 。

Page 27: Struts学习笔记

2004-2-10 struts学习笔记 27

Struts 核心• ActionFoward 是对 mapping 中一个 fowar

d 的包装,对应于一个 url• ActionMapping 是 ActionConfig 的子类,实质上是对 struts-config.xml 的一个映射,从中可以取得所有的配置信息

• Action 是用于执行业务逻辑的 RequsestHandler 。每个 Action都只建立一个 instance 。Action 不是线程安全的,所以不应该在 Action 中访问特定资源。

Page 28: Struts学习笔记

2004-2-10 struts学习笔记 28

Struts 核心• ActionForm使用了 ViewHelper 模式,是对

HTML中 form 的一个封装。其中包含有 validate 方法,用于验证 form数据的有效性。 ActionForm 是一个符合 JavaBean 规范的类,所有的属性都应满足 get 和 set 对应。对于一些复杂的系统,还可以采用 DynaActionForm来构造动态的 Form ,即通过预制参数来生成Form 。这样可以更灵活的扩展程序。 ActionServlet使用 ActionForm 来保存请求的参数,这些 bean 的属性名称与 HTTP请求参数中的名称相对应,控制器将请求参数传递到 ActionForm bean 的实例,然后将这个实例传送到Action类。

Page 29: Struts学习笔记

2004-2-10 struts学习笔记 29

Struts 核心• ActionErrors 是对错误信息的包装,一旦在执行 action或者 form.validate 中出现异常,即可产生一个 ActionError并最终加入到 ActionErrors 。在 Form验证的过程中,如果有 Error 发生,则会将页面重新导向至输入页,并提示错误

Page 30: Struts学习笔记

2004-2-10 struts学习笔记 30

基于 Struts 的开发流程1. 收集和定义应用需求。2. 基于数据采集和显示的原则定义和开发“屏幕显示”需求。

3. 为每一个“屏幕显示”定义访问路径。4. 定义 ActionMappings 建立到应用业务逻辑之间的联系。

5. 开发满足“屏幕显示”需求的所有支持对象。6. 基于每一个“屏幕显示”需求提供的数据属性莱创建对应的 ActionForm 对象。

Page 31: Struts学习笔记

2004-2-10 struts学习笔记 31

基于 Struts 的开发流程7. 开发被 ActionMapping调用的 Action 对象。8. 开发应用业务逻辑对象( Bean , EJB,等等)。

9. 对应 ActionMapping数据的流程创建 JSP页面。

10.建立合适的的配置文件 struts-config.xml ,web.xml 。通过它们配置 Struts 中的各个模块之间的交互。

11.开发 /测试 / 部署。

Page 32: Struts学习笔记

2004-2-10 struts学习笔记 32

Struts 学习资料• 目前很多大型公司也注意到 Struts ,它们的工具也提供相应的对 Struts 开发的支持。比如 IBM WSAD5.0 ( Websphere Studio Application Developer ), BEA 的 WebLogic Workshop 8.1等。另外,一些公司专么提供可视化的 Struts集成开发环境。如下页表所列:

• 其实,这些主要是提供对 taglib 的图形化的操作。从这个角度来说,我觉得直接在 Dreamweaver里装个支持 Tag 的插件比较好,很小,只有几K,又方便。

Page 33: Struts学习笔记

2004-2-10 struts学习笔记 33

Struts 学习资料应用程序 性质 网址

Adalon 商业软件 http://www.synthis.com/products/adalon

Easy Struts 开放源码 http://easystruts.sourceforge.net/

Struts Console 免费 http://www.jamesholmes.com/struts/console

JForms 商业软件 http://www.solanasoft.com/

Camino 商业软件 http://www.scioworks.com/scioworks_camino.html

Struts Builder 开放源码 http://sourceforge.net/projects/rivernorth/

StrutsGUI 免费 http://www.alien-factory.co.uk/struts/struts-index.html

Page 34: Struts学习笔记

2004-2-10 struts学习笔记 34

Struts 学习资料Struts论坛:• Apache Project 论坛: http://

www.javaresearch.org/forum/forum.jsp?column=20

• ChinaJavaWorld 的 Struts 及 MVCFrameWork论坛: http://www.chinajavaworld.net/forum/forums.cgi?forum=48

• Hibernate 中文网的 Hibernate 中文论坛:http://forum.hibernate.org.cn/

Page 35: Struts学习笔记

2004-2-10 struts学习笔记 35

Struts 学习资料• 关于 struts 的书籍,我认为比较好的有,一本

是 Struts 的开发人员写的《 Struts In Action》,一本是《 Jakarta Struts》。这两本都是英文的,可以精读,也可以做手册、工具书。

• 此外, Struts自带的丰富文档是学习 Struts的最好教材。 Struts 是一个开源项目,你可以下载它的源代码进行学习。它的源代码写得非常规范,注释也很详细。

Page 36: Struts学习笔记

2004-2-10 struts学习笔记 36

Struts 框架

个人思考

Page 37: Struts学习笔记

2004-2-10 struts学习笔记 37

个人思考Struts 的优点Tiles国际化和本地化一个 struts 的小例子Struts + Hibernate 的 J2EE 架构

HibernateJ2EEStruts + Hibernate 的 J2EE 架构

总结

Page 38: Struts学习笔记

2004-2-10 struts学习笔记 38

Struts 的优点• 结构清晰

MVC 的实现――“三权分立”(业务逻辑、控制、显示)• 标签丰富六种 Taglib

• 易于重用降低了耦合度,且 Tiles 的引入

• 代码美观 jsp 页面中几乎不会掺杂 java脚本

• 开源

Page 39: Struts学习笔记

2004-2-10 struts学习笔记 39

Tiles•传统的 Web 页面组织方式:

– 采用的基于 jsp 的方式 。 Jsp 页面包含表示逻辑和 HTML 布局标签,两者之间没有分离,这种方式通常应用于小型的、不很复杂的 web 应用程序。

– 使用 JSP 的 include指令,把其他静态或动态的页面包含到本页面。

Page 40: Struts学习笔记

2004-2-10 struts学习笔记 40

Tiles• 模板是用 JSP自定义标签库描述页面布局的 J

SP 页面。• 模板用于定义应用程序的页面样式,而不指定内容。运行时内容插入到模板页面中。

• Tiles 扩展了模板的概念,除了替代 Template的基本模板功能外,还增加了布局定义、虚拟页面定义和动态页面生成等功能。

• Tiles强大的模板功能能够使页面获得最大的重用性和灵活性此外可以结合 Tiles配置文件中的页面定义和 Action 的转发逻辑,即你可以将一个 Action转发到一个在 Tiles配置文件中定义的虚拟页面,从而减少页面的数量。

Page 41: Struts学习笔记

2004-2-10 struts学习笔记 41

Tiles• 通常的来说一个页面大概可以划分为如下几块:

– head 页面头部:存放一个运用的公共信息如 logo等,如果是网站可能是最上面的一块。

– menu 页面菜单:放置一个运用中需要使用的菜单,或者在每一个页面都使用的连接。

– footer 页面尾部:如版权信息等。– body页面主题内容:每个页面相对独立的内容。

• 如果按上面的划分那对每一个页面我们只要写body 里面的内容,其他的就可以共享重用。如果大多数页面的布局基本相同我们甚至可以使用一个 jsp文件根据不同的参数调用不同的body。

Page 42: Struts学习笔记

2004-2-10 struts学习笔记 42

国际化和本地化• 国际化( internationalization )• 本地化( localization )。• 用户在他们的计算机中定义自己所在的区域,

当 web 应用程序需要输出一条消息时,它将引用一个资源文件,在这个文件中所有的消息都使用了适当的语言。一个应用程序可能提供了很多资源文件,每个文件提供了用不同语言编写的消息。如果没有找到所选语言的资源文件,就将使用默认的资源文件。

Page 43: Struts学习笔记

2004-2-10 struts学习笔记 43

国际化和本地化• struts 框架对国际化的支持是使用 <bean:message>

标记,以及使用 java.util数据包中定义的 Locale 和ResourceBundle类来实现 Java2平台对这些任务的支持。 Java.text.MessageFormat类定义的技术可以支持消息的格式。

• 在具体实现时通过指定 Struts taglib 中每个 tag 的 locale属性实现选择不同的语言,由于 tag 的 locale 支持 session bean ,所以只需要在用户登录时在 session 中设置一个 Locale 对象,所有的输出信息即可自动处理。

Page 44: Struts学习笔记

2004-2-10 struts学习笔记 44

一个 struts 的小例子• 需求:

– 公司员工输入工号和密码;通过验证后查看到自己的详细信息(假设有真实姓名 name 、出生年月 birthdate )。

– 并需要支持中文、英文两种语言。 – 有两个 jsp 页面 signin.jsp 和 detail.jsp 。用户在

signin.jsp 页面输入员工编号和密码,提交; action 中调用验证接口,如果验证通过,再调用获取详细信息接口,返回该员工的信息,在 detail.jsp页面中显示,呈现给用户。另有一个 StaffAction和一个 StaffForm. 。

Page 45: Struts学习笔记

2004-2-10 struts学习笔记 45

一个 struts 的小例子• 编写资源文件 ApplicationResources_cn.properti

es 和 ApplicationResources_en.properties– ApplicationResources_cn.properties 文件:

– ApplicationResources_en.properties 文件:

staff.code=”编号” staff.name=”员工姓名” staff.pass=”密码” staff.birth=”出生年月”

staff.code=”code” staff.name=”name” staff.pass=”password” staff.birth=”the date you were born”

Page 46: Struts学习笔记

2004-2-10 struts学习笔记 46

一个 struts 的小例子• 设计显示页面

1. signin.jsp文件部分代码:<tr><td><bean:message key="staff.code " />::</td><td><html:text property="staffCode" size="40" /></td></tr><tr> <td><bean:message key="staff.pass " />::</td><td><html:text property="staffPassword" size="40" /></td></tr>

Page 47: Struts学习笔记

2004-2-10 struts学习笔记 47

一个 struts 的小例子2. detail.jsp文件部分代码:

<tr><td><bean:message key="staff.name " />::</td><td><html:text property="staffName" size="40" /></td></tr><tr> <td><bean:message key="staff.birth " />::</td><td><html:text property="staffBirthdate" size="40" /></td></tr>

Page 48: Struts学习笔记

2004-2-10 struts学习笔记 48

一个 struts 的小例子• 设计 ActionForm :

– StaffForm.java文件部分代码public class StaffForm extends ActionForm {

public StaffForm (){} // 构造函数

//get , set private String staffName = null;public String getStaffName(){

return staffName; }public void setStaffName (String staffName ) {

this. staffName = staffName;}

……//get set for staffCode 、 staffPassword 、 staffBirthdate}

Page 49: Struts学习笔记

2004-2-10 struts学习笔记 49

一个 struts 的小例子• 设计 Action

– StaffAction.java 部分代码public final class DepartmentAction extends Action { public ActionForward execute(ActionMapping mapping,actionForm form,

HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { StaffForm staffForm = (StaffForm) form;

String code = staffForm.getStaffCode();String pass = staffForm.getStaffPassword();…………// 创建对象 staffImpl ,调用接口验证接口。if(staffImpl.validate(code,pass))//验证通过,调用接口,获取其详细信息

{ StaffForm staffForm = new StaffForm (); staffImpl.getStaffInfo()(code);

HttpSession session = request.getSession(); if ("request".equals(mapping.getScope()))

request.setAttribute(mapping.getAttribute(),staffForm); else

session.setAttribute(mapping.getAttribute(),staffForm); return (mapping.findForward("staff_detail"));

}else return (mapping.findForward("failuer"));

} }

Page 50: Struts学习笔记

2004-2-10 struts学习笔记 50

一个 struts 的小例子• 编写配置文件 struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><struts-config> <form-beans> <form-bean name="/example/staffForm" type="example.StaffForm"/> </form-beans> <global-forwards> <forward name="/welcome" path="/welcome.htm"/> <global-forwards> <action-mappings> <action path="/staffAction"

type="example.StaffAction" name="/example/staffForm" scope="request" ><forward name="/detail" path="/detail.jsp"/>

</action> </action-mappings> <message-resources parameter=“example.ApplicationResources_cn"/></struts-config>

Page 51: Struts学习笔记

2004-2-10 struts学习笔记 51

个人思考Struts 的优点Tiles国际化和本地化一个 struts 的小例子Struts + Hibernate 的 J2EE 架构

HibernateJ2EEStruts + Hibernate 的 J2EE 架构

总结

Page 52: Struts学习笔记

2004-2-10 struts学习笔记 52

Struts + Hibernate 的 J2EE 架构

• Hibernate– 一种对象和关系之间映射( ORM )的框架– 它对 JDBC 进行了轻量级的对象封装,使得 Java 程序员可以使用对象编程思维来操作关系数据库。

– 开源、有丰富的文档和稳定的开发背景。– Hibernate 目前最高版本 2004 年 2 月 4日发布的

是 2.1.2 版。– Hibernate官方网站: http://

hibernate.bluemars.net/( http://www.hibernate.org/)

Page 53: Struts学习笔记

2004-2-10 struts学习笔记 53

Hibernate• 配置 Hibernate

– Classpath– 初始化文件 Hibernate.p

roperties或 hibernate.cfg.xml

• 创建持久对象• 编写对象关系映射描述

Classname.hbm.xml • 编写业务逻辑类。这些

JavaBean 实现了具体的业务逻辑,也封装了对 Hibernate 的访问。

Page 54: Struts学习笔记

2004-2-10 struts学习笔记 54

Struts + Hibernate 的 J2EE 架构

• J2EE– J2EE 规范定义了应用客户组件、 Enterpris

e JavaBeans 组件、 web 组件( Servlet 、JSP )和 Applet 。一个多层的分布式的应用模型意味着应用逻辑被根据功能划分成组件,并且可以在同一个服务器或不同的服务器上安装组成 J2EE 应用的这些不同的组件。其最终目的就是成为一个能够使企业开发者大幅缩短投放时间的体系结构。

Page 55: Struts学习笔记

2004-2-10 struts学习笔记 55

Struts + Hibernate 的 J2EE 架构

• J2EE– J2EE 的基本原则之一,是使得各个层的实现解除耦合或耦合最小化。最终实现可以任意地切换某个层的实现。

– 早期的网络系统设计采用三层结构:表示( presentation )层、领域( Domain )层、基础架构( infrastructure )层。

– 传统的 Brown 模型指:表示( presentation )层、控制 / 中介( Controller/Mediator )层、领域( Domain )层、数据映射( Data Mapping )层、基础架构( infrastructure )层。

Page 56: Struts学习笔记

2004-2-10 struts学习笔记 56

Struts + Hibernate 的 J2EE 架构

• J2EE– Cube 理论把 J2

EE 进行分析,可以分为 5 层。每层都是按系统中业务逻辑划分的,它具有唯一的职责。每层与相邻层都是松散耦合的。

Page 57: Struts学习笔记

2004-2-10 struts学习笔记 57

Struts + Hibernate 的 J2EE 架构

• J2EE– 一个典型的 J2EE四层结构:

Page 58: Struts学习笔记

2004-2-10 struts学习笔记 58

Struts + Hibernate 的 J2EE 架构

• J2EE– struts + Hibernate 的 J2EE 结构与各层之间的对

应关系如下表 :ISA Brown J2EE 层 对应程序部分

表示层 表示层 客户层

服务器表示层

浏览器 HTML 页面 , XSL, 手机客户端等 JSP 及 ActionForm ,XML

控制 / 中介层 Controller 控制器及 Action

领域层 领域层 业务层 Javabeans / SessionBean /Session Facade

数据映射层 整合层 EntityBean / JDO / Hibernate / JDBC

数据层 数据源层 资源层 RDBMS 数据库

Page 59: Struts学习笔记

2004-2-10 struts学习笔记 59

Struts + Hibernate 的 J2EE 架构

• Struts 和 Hibernate 这两个框架结合起来很好地实现了 MVC 的设计模式

Acti onServl etMapping

Acti onHibernate

JSPTagl i b

View Model

Control

Controller:ActionServlet

Model:Action+Hibernate

View:JSP+Taglib

Page 60: Struts学习笔记

2004-2-10 struts学习笔记 60

Struts + Hibernate 的 J2EE架构

• 基于该架构的 J2EE 应用架构图J SP页面

J SP Tagl i b技术、

控制组件、业务逻辑Acti onServl et、Acti on J ava、 类等

O/ R Mappi ng、持久J DO对象、

关系数据库RDBMS

表示层

业务层

数据转换和访问层

存储

struts

hi bernate

Page 61: Struts学习笔记

2004-2-10 struts学习笔记 61

Struts + Hibernate 的 J2EE 架构

Client提交请求

ActionServlet寻找请求对应

Action的 和ActioForm

Action执行 的Execute方法

返回ActionForward

JSP,结合Taglib

ActionForm

Action.Execute JavaBean

业务逻辑模块接口

O/R映射文件

关系数据库

返回请求处理结果

Page 62: Struts学习笔记

2004-2-10 struts学习笔记 62

Struts + Hibernate 的 J2EE 架构

• 基于 Struts 和 Hibernate 的 J2EE 的完整构架为: JSP(View) ---> Action Form Bean (Model) ---> Action(Control); Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB

• 结合前面的那个小例子,我们来了解这种架构的流程 :– 当用户通过浏览器访问网页,提交了一个页面。于

是根据 ActionMapping ,特定 Action 得到了这个FormBean ,把 FormBean属性读出来,然后构造一个对象,再调用业务层的 Bean类。而业务层Bean收到这个对象之后,调用 DAO接口方法,进行持久对象的持久化操作。

Page 63: Struts学习笔记

2004-2-10 struts学习笔记 63

Struts + Hibernate 的 J2EE 架构

– 业务 Bean取得 password(注意 : password 对象只是 Staff的一个属性 ) 对象之后调用 DAO接口,返回一个 Staff对象。然后业务 Bean把 Staff对象返回给 Action 。

– Action拿到 Staff之后,把 Staff的基本属性取出(集合属性如果不需要就免了 ) ,构造 ActionFormBean ( StaffBean ),然后把 StaffFormBean request.setAttribute(...) ,然后重定向到查询结果页面。

– 查询页面得到 request 对象里面的 ActionFormBean ( StaffBean ),调用 tag 显示内容。

Page 64: Struts学习笔记

2004-2-10 struts学习笔记 64

总结Struts 是一种 web 框架,其清晰的结构、丰富标签和很好的易扩展性使它得到了很多 java 开发和设计人员的喜爱。还有一个重要的原因,它是一个开源项目,而且文档丰富。和另一个实现对象关系映射的开源项目――Hibernate――结合起来,体现了一种小而便捷的 J2EE架构。目前,基于 Struts 和 Hibernate 的项目越来越多。有人说, JSF+Struts+Spring+Hibernate/JDO 是未来 J2EE 标准开发模式。

Page 65: Struts学习笔记

2004-2-10 struts学习笔记 65

Struts 框架

个人思考

Page 66: Struts学习笔记

2004-2-10 struts学习笔记 66

题外话

架构框架模式

Page 67: Struts学习笔记

2004-2-10 struts学习笔记 67

架构• architecture ,体系结构

– A style and method of design and construction – Orderly arrangement of parts;– Architecture refers to an abstract representation of a syst

em’s components and behaviors. – Architecture does not contains details about implementa

tion. • 架构一般针对一个行业或一类应用,是技术和应用完美的结合。

• 架构是宏观上的。定义构成一个系统的各个组成部分。比如基于 J2EE 的三层架构: WEB层,应用中间层及数据层,从宏观上定义系统的各个组成部分。

• 目标:重用、透明、延展、简明、高效、安全

Page 68: Struts学习笔记

2004-2-10 struts学习笔记 68

框架• 框架, Framework

– A structure for supporting or enclosing something else, especially a skeletal support used as the basis for something being constructed

– A fundamental structure, as for a written work or a system of ideas.

• 框架因为比较小,很多表现为中间件,框架一般是从技术角度解决同类问题

• 框架是具体化的架构。用于细化整个架构或某一组成部分。如 STRUTS 是定义WEB层的框架。

Page 69: Struts学习笔记

2004-2-10 struts学习笔记 69

模式• Pattern

– Common solutions to recurring problems.– Help you build complex and heterogeneous software arc

hitectures.• 模式的概念更小,更为灵活,可重用的范围更广。 • 一个框架可能使用了多个模式,而一个架构有可能应

用了多个框架,这样一个大型系统的设计基本从主骨干到骨架基本能够被设计者考虑设计到,也可以想见,一个系统被细化成了很多工作量,例如一个部分细化到工厂模式,那么就可以要求程序员实现工厂模式的代码即可。

Page 70: Struts学习笔记

2004-2-10 struts学习笔记 70

Thank U!~

—The End—