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中的相关地方:
相关推荐
Struts2是一款非常流行的Java Web框架,用于构建企业级应用。然而,随着时间的推移,Struts2在安全方面暴露出了一些重要的漏洞,这给使用该框架的系统带来了潜在的安全风险。"Struts2漏洞检查工具Struts2.2019.V2.3...
Struts1.2驱动包是Java Web开发中一个重要的组件,它是Apache Struts框架的特定版本,用于支持基于Model-View-Controller (MVC)设计模式的应用程序开发。Struts1.2因其稳定性和广泛的功能集而在过去备受推崇,尤其在...
### Struts2核心知识点解析 #### 一、Struts2框架概述 - **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,...
Struts 2是一款基于Java的开源MVC框架,它在Web应用开发中广泛使用,但同时也因其复杂的架构和历史遗留问题,成为了网络安全的焦点。这个标题提到的是一个全面的Struts 2漏洞检测工具,旨在帮助开发者和安全专家识别...
该工具的打开路径为:\Struts2VulsTools-2.3.20190927\Test\bin\Release\Text.exe 2019-09-25: 优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建...
Struts是一个开源的Java Web应用程序框架,主要用于构建MVC(Model-View-Controller)模式的Web应用。在Java EE世界中,Struts扮演着至关重要的角色,它简化了开发过程,提高了代码的可维护性和可扩展性。SSH框架是...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...
Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...
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是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户交互式、数据驱动的web应用的过程。这个“Struts2接口文档”是开发者的重要参考资料,提供了关于...
struts2框架的详细搭建 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" ...
Struts2-showcase是一个用于演示和学习Apache Struts2框架功能的开源项目。这个压缩包“struts2-showcase.rar”包含了完整的源代码,旨在帮助开发者深入理解Struts2框架的工作原理及其各种特性。以下是对Struts2和...
struts2 chm 程序包 org.apache.struts2 接口概要 接口 说明 StrutsStatics Constants used by Struts. 类概要 类 说明 RequestUtils Request handling utility class. ServletActionContext Web-specific ...
Struts 2整合Struts 1,允许开发者利用Struts 1已有的投资,同时享受Struts 2带来的优势,如增强的类型安全和更强大的拦截器机制。 在《Struts 2权威指南--基于WebWork核心的MVC开发》这本书中,作者李纲深入浅出地...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用,提供了强大的控制层来处理请求、数据绑定、验证和结果展示。Struts2.2.3是Struts2的一个版本,这个...
北京时间8月22日13时,Apache官方发布通告公布了Struts2中一个远程代码执行漏洞(cve-2018-11776)。该漏洞可能在两种情况下被触发,第一,当没有为底层xml配置中定义的结果设置namespace 值,并且其上层动作集配置...
包含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-...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。Struts2的核心是Action类,它负责处理用户请求,与模型进行交互,并将结果返回给视图。在Struts2的版本...
Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了构建基于Java EE的Web应用程序的过程。本资源包含"struts2所有jar包程序文件",是...