三大框架SSH的底层机制及原理

上传人:宝路 文档编号:21431406 上传时间:2017-11-23 格式:DOC 页数:21 大小:170.06KB
返回 下载 相关 举报
三大框架SSH的底层机制及原理_第1页
第1页 / 共21页
三大框架SSH的底层机制及原理_第2页
第2页 / 共21页
三大框架SSH的底层机制及原理_第3页
第3页 / 共21页
三大框架SSH的底层机制及原理_第4页
第4页 / 共21页
三大框架SSH的底层机制及原理_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《三大框架SSH的底层机制及原理》由会员分享,可在线阅读,更多相关《三大框架SSH的底层机制及原理(21页珍藏版)》请在金锄头文库上搜索。

1、Struts1的工作原理Struts1工作原理图:1、初始化:struts 框架的总控制器 ActionServlet是一个 Servlet,它在web.xml中配置成自动启动的 Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为 struts中不同的模块初始化相应的对象。(面向对象思想)2、发送请求:用户提交表单或通过 URL向 WEB服务器提交请求,请求的数据用HTTP协议传给 web服务器。3、form 填充:struts 的总控制器 ActionServlet在用户提交请求时将数据放到对应的 form对象中的成员变量中。4、派发请求:控制

2、器根据配置信息对象 ActionConfig将请求派发到具体的Action,对应的 formBean一并传给这个 Action中的 excute()方法。5、处理业务:Action 一般只包含一个 excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个 ActionForward对象。服务器通过ActionForward对象进行转发工作。6、返回响应:Action 将业务处理的不同结果返回一个目标响应对象给总控制器。7、查找响应:总控制器根据 Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为 jsp页面。8、响应用户:目标响应对象将结果传递给

3、资源对象,将结果展现给用户。ssh 框架启动流程 系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用 Struts作为系统的整体基础架构,负责 MVC 的分离,在 Struts 框架的模型部分,利用 Hibernate框架对持久层提供支持,业务层用 Spring 支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的 Java 对象,然后编写基本的 DAO 接口,并给出 Hibernate 的 DAO 实现,采用 Hibernate 架构实现的 DAO 类来实现 Java 类与数据库之间的转换和访问,最后由 Spring 完成业务逻辑。 系统的

4、基本业务流程是:在表示层中,首先通过 JSP 页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后 Struts 根据配置文件 (struts-config.xml)将ActionServlet 接收到的 Request 委派给相应的 Action 处理。在业务层中,管理服务组件的 Spring IoC 容器负责向 Action 提供业务模型(Model) 组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于 Hibernate 的对象化映射和数据库交互,处理 DAO组

5、件请求的数据,并返回处理结果。 采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。Struts1 与 struts2 有什么不同1.Action类 Stuts1要求 Action类继承一个抽象基类。Struts1 的一个普通问题是使用抽象类编程而不是接口。Struts2 Action 类可以实现一个 Action接口,也可以实现其它接口,使可选和定制的服务成为可能。Str

6、uts2 提供一个ActionSupport基类去实现常用的接口。Action 接口不是必须的,任何有execute标识的 POJO对象都可以用作 Struts2的 Action对象。 2. 线程模式:Struts1 Action 是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了 Struts1 Action能作的事,并且要在开发时特别小心。Action 资源必须是线程安全的或同步的。 Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 3. Servlet依赖:Struts1 Action 依赖于 Servlet

7、API,因为当一个 Action被调用时,HttpServletResquest 和 HttpServletResponse被传递给 execute方法,即 Action依赖了容器,测试变得非常麻烦。Struts2 Action 不依赖于容器,允许 Action脱离容器单独被测试。如果需要,Struts2Action 仍然可以访问初始的 request和 response。但是,其它的元素减少或者消除了直接访问HttpServletRequset和 HttpServletResponse的必要性。 4.捕获输入:Struts1使用 ActionForm对象捕获输入。所有的 ActionForm

8、必须继承一个基类。因为其它 JavaBean不能用作 ActionForm,开发者经常创建多余的类捕获输入。动态 Bean可以作为创建传统 ActionForm的选择,但是,开发者可能是在重新描述已经存在的 JavaBean,仍然会导致有冗余的 javabean。Struts2 直接使用 Action属性作为输入属性,消除了对第二输入对象的需求。Action 属性能够通过 web页面上的 taglibs访问。Struts2 也支持 ActionForm模式。(Struts2 用普通的 POJO来接收数据) 5.表达式语言:Struts1 整合了 JSTL,但对集合和索引属性的支持很弱。Stru

9、ts2可以是使用 JSTL,但是也支持一个更加强大和灵活的表达式语言 “Object Graph Notation Language”(OGNL). 6. 绑定值到页面(view):Struts1 使用标准 JSP机制把对象绑定到页面中来访问,Struts1 要传递值的时候必须往 request里放、往 session里放,然后再传递到 jsp里面,铜鼓 el表达式得到。Struts2 使用“ValueStack”技术,使 taglib能够访问值而不需要把你的页面和对象绑定起来。ValueStack 策略允许通过一系列名称相同但类型不同的属性重用页面。值栈技术非常著名。不需要 request、

10、不需要 session,直接从 Action中取值。 7.类型转换: Struts1ActionForm 属性通常都是 String类型。Struts1 使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。Struts2 使用 OGNL进行类型转换。提供基本和常用对象的转换器。8.校验:Struts1 支持在 ActionForm的 validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。Struts2 支持通过 validate方法和 Xwork校验框架来进行校验。

11、Xwork校验框架使用为属性类类型定义的校验和内容校验,来支持 chain校验子属性。 9.Action执行的控制:Struts1 支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有 Action必须共享相同的生命周期。(服务器重启时,Action 生命周期结束,即生命周期无法控制)。Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个 Action创建不同的生命周期。堆栈能够根据需要和不同的 Action一起使用。(可以控制Action的生命周期) 简单的说:struts1 和 struts2的核心原理不同: struts1.X

12、是基于 servlet的 struts2是 xwork的变体:他的核心是 filter struts1是单例模式开发, struts2是多例模式。 struts1的单例模式好处是节省内存,缺点是并发性查,非同步。 struts2好处是线程安全是同步的每次使用开辟新的内存空间,缺点是占用资源多。Model1 的原理:Struts1 的工作原理:图 2 它引入了控制器这个概念,控制器一般由 servlet来担任,客户端的请求不再直接送给一个处理业务逻辑的 JSP页面,而是送给这个控制器,再由控制器根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。因此,这个 servlet控制器为应用

13、程序提供了一个进行前-后端处理的中枢。一方面为输入数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点;另一方面也提供了将业务逻辑从 JSP文件剥离的可能。业务逻辑从 JSP页面分离后,JSP 文件蜕变成一个单纯完成显示任务的东西,这就是常说的 View。而独立出来的事务逻辑变成人们常说的 Model,再加上控制器 Control本身,就构成了 MVC模式。实践证明,MVC 模式为大型程序的开发及维护提供了巨大的便利。 其实,MVC 开始并不是为 Web应用程序提出的模式,传统的 MVC要求 M将其状态变化通报给 V,但由于 Web浏览器工作在典型的拉模式而非推模式,很难做到这一点

14、。因此有些人又将用于 Web应用的 MVC称之为 MVC2。正如上面所提到的 MVC是一种模式,当然可以有各种不同的具体实现,包括您自己就可以实现一个体现 MVC思想的程序框架,Struts 就是一种具体实现 MVC2的程序框架。它的大致结构如图三所示: 图三 图三基本勾勒出了一个基于 Struts的应用程序的结构,从左到右,分别是其表示层(view)、控制层(controller)、和模型层(Model)。其表示层使用Struts标签库构建。来自客户的所有需要通过框架的请求统一由叫ActionServlet的 servlet接收(ActionServlet Struts 已经为我们写好了,只

15、要您应用没有什么特别的要求,它基本上都能满足您的要求),根据接收的请求参数和 Struts配置(struts-config.xml)中 ActionMapping,将请求送给合适的 Action去处理,解决由谁做的问题,它们共同构成 Struts的控制器。Action则是 Struts应用中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的 JSP(或 Action)的 ActionForward对象给ActionServlet以将响应呈现给客户

16、。 过程如图四所示: 图四 这里要特别说明一下的是:就是 Action这个类,上面已经说到了它是 Struts中真正干活的地方,也是值得我们高度关注的地方。可是,关于它到底是属于控制层还是属于模型层,存在两种不同的意见,一种认为它属于模型层,如:JSP Web 编程指南;另一些则认为它属于控制层如:Programming Jakarta Struts、Mastering Jakarta Struts和Struts Kick Start等认为它是控制器的一部分,还有其他一些书如Struts in Action也建议要避免将业务逻辑放在 Action类中,也就是说,图 3中 Action后的括号中的内容应该从中移出,但实际中确有一些系统将比较简单的且不打算重用的业务逻辑放在 Action中,所以在图中还是这样表示。显然,将业务对象从 Action分离出来后有利于它的重用,同时也增强了应用程序的健壮性和设计的灵活性。因此,它实际上可以看作是 Controller与 Model的适配器,如果硬要把它归于那一部分,笔

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号