简介
Struts框架是MVC的一个实现,它很好的结合了JSP、Servlet、JavaBean、Taglib等技术。它为MVC的各层提供了良好的支持,就像房地产商盖房子时先盖的大楼框架。只要引入到项目就相当于你已经有了基本的雏形。
ok,在概念的层面去理解偏技术的知识,我不认为这是一个好的出发点。对于这类知识的学习最好的方法应该是,动手。所以,我们不寻求准确的概念定义,而是从使用中来认知。
回顾
MVC
作为MVC的一个实现,学习之前我们先简单的回顾一下MVC的内容。MVC架构模式,将一个应用程序的出入、处理、输出流程分为:模型层、视图层、控制层。MVC模式下的各层关系和功能如下图(注:图片来源于《征服JSP企业网站开发》443页):
有关MVC的东西都在这张图里了,这里要提个题外话:MVC和三层的关系。听到也看到不少关于这两个的讨论,结论基本都是这两种模式没有关系。个人认为这是从两种不同的角度去优化程序结构的。MVC是从处理流程的角度去划分:显示、控制、处理;而三层则是从功能的角度出发:显示、逻辑处理、数据访问。这两种模式是不冲突的!他们的关系也就是这么个关系了,不能简单的说是有或者没有关系,有点太粗暴了。
Model1
Model1也是MVC的一种,通过JSP+JavaBean来实现。因为JSP页面可以很方便的写入JavaBean的代码涉及业务逻辑,也可以结合Html用用于显示,又可以通过Javascript来控制流转。也就是说JSP在应用程序中担当了多种角色:负责与客户端的通信、处理请求、处理回复。这样的结构的优点是简单、方便,可以快速的完成应用开发。同时,也因为这样的结构也导致了其开发的分配以及后期的维护的困难。如图为Model1的结构(注:图片来源《STRUTS实用开发指南
基于MVC+MYECLIPSE的JAVA WEB应用开发》3页)
Model2
为了改善Model中JSP页面的指责过多而带来的问题,Model2引入了Servlet充当控制器,同时不在JSP中写入Java代码来直接访问数据库。这样就是程序的各个部分职责单一明确了,即JSP页面只负责显示,Servlet负责流转。这样维护起来就相对容易,同时开发时的分工的界限也可以很确定。这样做的导致的缺点则是处理流程变的复杂,本来一个JSP就可以搞定的事情现在则需要分多个步骤才可以完成。Model2的结构如下图(注:图片来源同上一张,5页):
Struts
Mode1和Model2只是概念,Sturts则是实现。Struts是MVC的一种实现,说的准确一点应该是Model2的实现。直接看图吧:
Struts对Model2的各个部分都做了实现,但是其最重点的是页面流转的部分。即图中的ActionServlet+struts-config.xml的部分,使得页面流转的路径很清晰,同时灵活性也非常好。
小结:本篇博客主要是从MVC的概念到Struts的架构的实现一步一步的了解,从而能够知道Struts各个部分对应的MVC的什么概念,以及在应用程序中的角色。至于详细的Struts内的组件将在后续的博客中介绍。这样吧!