`
ziwuzu
  • 浏览: 50434 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

struts

 
阅读更多

Struts 关于自己要说的第一句话就是:框架

…鼓励应用架构基于Model 2 方法,即经典的MVC 设计模式的变体

这句话打消了一些 web 开发者的疑虑,对那些还没深入Model 2 或 MVC 的人来说却更

加疑惑了。事实上,没有深入了解 MVC 和Sun Model 2,要理解很多Struts 的文章都很

困难。

2.4.1. MVC的演化

如 2.1 节所说, Model/View/Controller 原本是建立Smalltalk 应用的框架。框架支持代

表应用状态、屏幕表现和控制流的3 个类,分别叫做 Model, View, 和 Controller。

Smalltalk MVC 框架在颇为流行的书Design Patterns: Elements of Reusable

Object-Oriented Software[Go4]是作为案例来研究的。Design Patterns 这本书有四个作者,

被称为“四人帮GoF”。




 
 

Design Patterns 中的MVC 例子称为通知/订阅者(notify/subscribe)协议和观察者(Observer)

模式的使用。例子的基础是,对同一数据,系统可能需要不同的显示视图,比如条形图、饼

图、数据表格等等。这是一个划分应用的精彩理由,经常被重复引用。



 

在图2-6 所示的例子中,每种视图可能在同一时间显示给不同的用户。应用必须保证在其下

面的数据或者模型改变时视图的更新。为改变模型,用户提交一个请求给控制器,由控制起

来配合改变模型。数据视图必须跟着改变,以反映最近的模型改变状态。

Smalltalk MVC 方案使用观察者通知模式。在这种模式下,每个视图注册为一个模型数据

的观察者。然后模型可以通过发送消息给所有这册观察者,通知它们相关的改变。其为

Smalltalk MVC 框架已经通用化了,他也可以将它应用到其他平台上面。

 

在图2-6 所示的例子中,每种视图可能在同一时间显示给不同的用户。应用必须保证在其下

面的数据或者模型改变时视图的更新。为改变模型,用户提交一个请求给控制器,由控制起

来配合改变模型。数据视图必须跟着改变,以反映最近的模型改变状态。

Smalltalk MVC 方案使用观察者通知模式。在这种模式下,每个视图注册为一个模型数据

的观察者。然后模型可以通过发送消息给所有这册观察者,通知它们相关的改变。其为

Smalltalk MVC 框架已经通用化了,他也可以将它应用到其他平台上面。

2.4.2. Model 2的出现

JSP 的意图是使创建动态页面更容易。JSP 首先是作为servlet 的替代引入的,还有就是MS

的ASP。Servlet 的强大功能当作易于创建服务器页面的工具提供给开发者。但强大的功能

伴随着巨大的责任。很多团队发现,如果他们一不小心,他们的项目就会因为纠缠如麻的页

面变的容易崩溃。进一步的特性需要使用复杂的脚本程序。但脚本程序是非常难于重用的—

除非你在页面间把代码“拷贝粘贴”。

工具页面也可以包括进来,但它们很难被组织在一起,并且造成非常丑陋的“资源”树。有

些东西会出错。

很多开发人员很快意识到, JSP 和servlet 可以一起使用来部署web 应用。Servlet 可以

应付控制流,而 JSP 则可专注于讨厌的编写HTML 的任务。在这种情况下,结合使用 JSP

和 servlet 开始被称为Model 2 (单独使用JSP 称为Model 1)。

当然,从 Sun 那里仍然没什么新东西... 而且很多人很快指出 JSP Model 2 类似于经典的

Model-View-Controller 架构。

在很多场合,现在交互使用Model 2 和 MVC 这两个词已经很平常了,虽然还有一些争论,

即一个应用是否是 MVC,以及是否支持经典的观察者通知模式。没有观察者通知的

Model-View-Controller 有时被称为MVC2 或Web MVC。.

2.4.3. 应用层—视图之间的去耦合

Model 2 被认为区别于MVC 的一个原因是,观察者/通知模式不能在web 环境内工作的

很好。HTTP 是一个 “拉” 的协议: 客户请求然后服务器响应。没有请求就没有响应。观察

者模式需要一种“推”协议来进行通知,以便服务器能在模型改变时将信息推送到客户端。

虽然也有一些方法能模拟将数据推送到客户端,但这和基本情况相悖,并且会视为是个权宜

之计的修补。

图 2-7 MVC 通常表示为3 个互相连接的组件

图2-7 是典型的Model-View-Controller 范式,经常被表示为:一个互相连接的三角形。在

web 应用中维护范式中的“通知改变”部分是非常困难的。

这些东西在所有资源都在一台服务器上,而且客户端保持一个开放连接的情况下工作得非常

好。如果资源分布在不同的服务器上,并且客户端不能维护一个开放的连接情况下,工作的

并不理想。

许多分布式系统架构,包括 web 应用,在视图进行状态查询的概念时退缩了。绝大多数情

况下,远程应用是按层模式[POSA]设计的。基本上,层模式下,层内的对象可以和同一层

或者相邻层的对象进行通信。在一个复杂应用中,这可以在添加组件时,防止依赖关系呈指

数增长。在设计远程应用时,分层是一个核心模式。

从 MVC 上下文中,引入层模式将状态改变和状态查询的职责加于控制器之上,并伴随着

改变通知。

 

 

图 2-8 Web 应用的层模式

如图2-8 ,分层的web 应用使用一种比传统MVC 模式更加“扁平”的模式。控制器被夹

在表现层(View) 和应用逻辑 (Model)之间。

每个组件的主要职责并没有改变。流程有轻微改变,即查询状态和改变通知都必须通过控制

器。另一个改变是,当视图,或者表现层需要渲染动态页面时,它使用从控制器传递的数据

而不是直接来自于模型层。这种改变去除了View 和 Model 的耦合,允许控制器选择数据

和显示这些数据的视图。

2.4.4. Struts如何实现Model 2, MVC, 和分层

Struts 通过提供一个控制器Servlet 实现了Sun 的 Model 2 架构,这个控制器可以用来管

理JSP 页面和其他表现设备之间的流程。Struts 通过使用ActionForward和ActionMapping

来保证表现层之外的控制流决策来实现 MVC/层模式。JSP 可以引用一个逻辑目标。控制

器组件在运行时提供准确的URI。

表列出了 Struts 的核心类,即对应的经典的MVC 组件职责。

表格 2.2 核心 Struts 类和MVC 的对应

类 描述

 

 

除了这些核心类, Struts 使用一些配置文件和视图助手(view helpers)来沟通控制器和

模型。下表列出了Struts 配置文件和描述了他们在架构中的角色。

表格 2.3 Strtuts 配置文件

文件 目的

ApplicationResources.properties 存储本地化信息和标签,以使应用可以国际化

struts-config.xml 存储控制器对象的缺省配置,包括模型支持的用户指向,

状态改变,状态查询

 

2.5.1. 总图

 



 图 2-9 Struts 请求-相应流程

图2-9 以UML以次序图的方式展示了Struts 请求-响应流程。我们来按这个请求-响应流

程走一遍。 括号内的数字请参照图11中的相关地方:

  • 大小: 8.4 KB
  • 大小: 31.1 KB
  • 大小: 5.3 KB
  • 大小: 56.6 KB
  • 大小: 20.4 KB
分享到:
评论

相关推荐

    struts1和struts2的区别

    struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...

    Struts2视频教程

    Struts2是一套非常优秀的Java WEB应用框架,实现优雅、功能强大、使用简洁。目前已有大量的企业项目采用Struts2来作为Web框架进行开发,掌握Struts2是每个进行Web开发的Java程序员的一项必备技能。 本视频对Struts2...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    搭建struts2框架

    struts2框架的详细搭建 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    struts框架jar包

    logging-1.0.4.jar commons-validator-1.3.1.jar jstl-1.0.2.jar oro-2.0.8.jar standard-1.0.2.jar struts-core-1.3.8.jar struts-el-1.3.8.jar struts-extras-1.3.8.jar struts-faces-...

    struts2实例 学生信息管理系统

    struts2实现的学生信息管理系统 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    struts.xml文件中新增以下内容: <!-- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...

    Struts2漏洞检查工具2019版 V2.3.exe

    Struts2漏洞检查工具2019版 警告: 本工具为漏洞自查工具,请勿非法攻击他人网站! ==漏洞编号==============影响版本=========================官方公告==========================================影响范围====...

    Struts2最新漏洞升级2.3.32版本

    1、升级所需要的jar(见附件): freemarker-2.3.22.jar ognl-3.0.19.jar struts2-convention-plugin-2.3.32.jar struts2-core-2.3.32.jar struts2-spring-plugin-2.3.32.jar ...<struts>“加在这里”</struts>

    struts1.0和struts2

    struts1和struts2的区别其实并不是太大,两者的区别: Action 类: ◆Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 ◆Struts 2 Action类可以实现一个Action接口,也...

    struts-config.xml struts标准配置文件 struts-config

    struts-config.xml struts标准配置文件 struts-config

    Struts简介 什么是Struts Struts基本运作流程

    Struts简介 什么是Struts Struts基本运作流程 ActionMapping类 Action类 ActionForm类 ActionError与ActionMessage 协同开发 模块化程序 Struts异常处理 Struts国际化支持 PlugIn接口 等等

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板 struts2环境搭建:基础框架搭建,简单易上手,适合新手,比你看书强多了,实践源于理论而高于理论,贵在实践 朋友。 struts2 新闻发布系统:struts2+jsp 功能不...

    在Eclipse中配置Struts2项目(html)手把手教会你 +struts2 标签库介绍(html) + STRUTS2学习文档.pdf + Struts2―表单验证validate(html) + struts2和struts的比较 + struts教程(html)

    在Eclipse中配置Struts2项目(html)手把手教会你 如何在Eclipse中配置Struts2。 struts2 标签库介绍(html)对Struts2的...struts2和struts的比较 让你更清楚的知道struts2和struts的不同之处。 struts教程(html)

    论坛系统项目(Struts 2+Hibernate+Spring实现)

    论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...

    struts1 和 struts2所需jar包

    struts1 和 struts2所需jar包。主要包含以下内容: struts-1.3.10-all.zip struts-1.3.10-apps.zip struts-1.3.10-lib.zip struts-1.3.10-src.zip struts-2.3.4.1-all.zip struts.rar

    Struts2实战.pdf

    《Struts 2实战》结合实例介绍了Struts 2框架,主要内容包括Action、Result、Interceptor等框架组件,基于注解的配置选项等新特征,Struts 2插件 FreeMarker,如何从Struts 1和WebWork 2迁移到Struts 2,Ajax标签、...

Global site tag (gtag.js) - Google Analytics