SSH-Struts(一)——基本原理
简单介绍
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在应用程序中担当了多种角色:负责与client的通信、处理请求、处理回复。
这种结构的长处是简单、方便,能够高速的完毕应用开发。同一时候。也由于这种结构也导致了其开发的分配以及后期的维护的困难。如图为Model1的结构(注:图片来源《STRUTS有用开发指南
基于MVC+MYECLIPSE的JAVA WEB应用开发》3页)
Model2
为了改善Model中JSP页面的指责过多而带来的问题,Model2引入了Servlet充当控制器,同一时候不在JSP中写入Java代码来直接訪问数据库。这样就是程序的各个部分职责单一明白了。即JSP页面仅仅负责显示。Servlet负责流转。
这样维护起来就相对easy。同一时候开发时的分工的界限也能够非常确定。这样做的导致的缺点则是处理流程变的复杂,本来一个JSP就能够搞定的事情如今则须要分多个步骤才干够完毕。Model2的结构例如以下图(注:图片来源同上一张,5页):
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1b2ppYWppbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
Struts
Mode1和Model2仅仅是概念,Sturts则是实现。Struts是MVC的一种实现。说的准确一点应该是Model2的实现。
直接看图吧:
Struts对Model2的各个部分都做了实现,可是其最重点的是页面流转的部分。
即图中的ActionServlet+struts-config.xml的部分,使得页面流转的路径非常清晰。同一时候灵活性也非常好。
小结:本篇博客主要是从MVC的概念到Struts的架构的实现一步一步的了解。从而可以知道Struts各个部分相应的MVC的什么概念。以及在应用程序中的角色。至于具体的Struts内的组件将在兴许的博客中介绍。
这样吧!
SSH-Struts(一)——基本原理的更多相关文章
- SSH—Struts(三)—跑步者(Action)
如已经描述Struts其基本原理和控制器ActionServlet,根据一个请求通过流ActionServlet之后就要到达Action类中做详细的处理了.ActionServlet通过ActionM ...
- SSH(Struts、Spring、Hibernate)三大框架整合
1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...
- [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6 ...
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)之间区别
http://m.blog.csdn.net/article/details?id=52795914#0-qzone-1-52202-d020d2d2a4e8d1a374a433f596ad1440
- SSH:Struts + Spring + Hibernate 轻量级Java EE企业框架
Java EE(Java Platform,Enterprise Edition)是sun公司(2009年4月20日甲骨文将其收购)推出的企业级应用程序版本.这个版本以前称为 J2EE.能够帮助我们开 ...
- 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)
上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观,作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能.它不不过一个"瞭望塔".更是检验是否真正掌握全 ...
- 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)
[SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...
- 【SSH】 之 Struts
(一)什么是Struts,Struts是什么? Struts是学习轻量级J2EE框架所必须要了解的一个框架,也是我们当前最最流行的三大框架(SSH——Struts,Spring,Hibernate)之 ...
随机推荐
- python subprocess重定向标准输出
subprocess.call("ping -c 1 %s" % ip,shell = True,stdout = open('/dev/null','w'),stderr = s ...
- 面向对象程序设计-C++ Stream & Template & Exception【第十五次上课笔记】
这是本门<面向对象程序设计>课最后一次上课,刚好上完了这本<Thinking in C++> :) 这节课首先讲了流 Stream 的概念 平时我们主要用的是(1)在屏幕上输入 ...
- 转:FileReader详解与实例---读取并显示图像文件
~~~针对需要读取本地图像,并立即显示在浏览器的情况,由于chrome firefox出于安全限制,input file并不返回文件的真实路径,经测试IE6/7/8都会返回真实路径,所以chrome, ...
- MFC基础,MFC自绘控件学习总结.---转
前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...
- 跟我一起学extjs5(25--模块Form的自己定义的设计[3])
跟我一起学extjs5(25--模块Form的自己定义的设计[3]) 自己定义的Form已经能够执行了,以下改一下配置,把Form里面的FieldSet放在Tab之下.改动一下Modu ...
- 【redis】windows
官方网站:http://www.redis.io 百度百科:http://baike.baidu.com/view/4595959.htm?fr=aladdin windows下安装redis: 下载 ...
- ubuntu15.04安装hexo
首先吐槽一下npm淘宝源,貌似中国目前唯一一个npm源,现在不好用了,不知道是不是换了地址,在吐槽一下万恶的墙!你懂得. 好了,说点正儿八经的事儿. 之所以安装hexo也是为了创建自己的博客,我只说最 ...
- C# 继承细节
假定没有为类定义任何显式的构造函数,这样编译器就会为所有的类提供默认的构造函数,在后台会进行许多操作,编译器可以很好地解决层次结构中的所有问题,每个类中的每个字段都会初始化为默认值.但在添加了一个我们 ...
- c语言中malloc realloc 和calloc的联系与区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
- Cin、Cout 加快效率方法
std::ios::sync_with_stdio(false); 在main 函数中加上这么一句话. 可以打消iostream的输入输出缓存,可以节省许多时间,使效率与scanf与printf相差无 ...