没有合适的资源?快使用搜索试试~ 我知道了~
详细描述struts1,struts2,hibernate,spring等原理机制及对比
资源推荐
资源详情
资源评论
的工作原理
Struts1 工作原理图:
1、初始化:struts 框架的总控制器 ActionServlet 是一个 Servlet,它在
web.xml 中配置成自动启动的 Servlet,在启动时总控制器会读取配置文件
(struts-cong.xml)的配置信息,为 struts 中不同的模块初始化相应的对象。
(面向对象思想)
2、发送请求:用户提交表单或通过 URL 向 WEB 服务器提交请求,请求的数
据用 HTTP 协议传给 web 服务器。
3、form 填充:struts 的总控制器 ActionServlet 在用户提交请求时将数据放
到对应的 form 对象中的成员变量中。
4、派发请求:控制器根据配置信息对象 ActionCong 将请求派发到具体的
Action,对应的 formBean 一并传给这个 Action 中的 excute()方法。
5、处理业务:Action 一般只包含一个 excute()方法,它负责执行相应的业务
逻辑(调用其它的业务模块)完毕后返回一个 ActionForward 对象。服务器通过
ActionForward 对象进行转发工作。
6、返回响应:Action 将业务处理的不同结果返回一个目标响应对象给总控制
器。
7、查找响应:总控制器根据 Action 处理业务返回的目标响应对象,找到对应
的资源对象,一般情况下为 jsp 页面。
8、响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。
ssh
框架启动流程 •
系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用 Struts
作为系统的整体基础架构,负责 MVC 的分离,在 Struts 框架的模型部分,利用 Hibernate
框架对持久层提供支持,业务层用 Spring 支持。具体做法是:用面向对象的分析方法根据
需求提出一些模型,将这些模型实现为基本的 Java 对象,然后编写基本的 DAO 接口,并
给出 Hibernate 的 DAO 实现,采用 Hibernate 架构实现的 DAO 类来实现 Java 类与数据库之
间的转换和访问,最后由 Spring 完成业务逻辑。
系统的基本业务流程是:在表示层中,首先通过 JSP 页面实现交互界面,负责传送请求
(Request)和接收响应(Response),然后 Struts 根据配置文件 (struts-config.xml)将
ActionServlet 接收到的 Request 委派给相应的 Action 处理。在业务层中,管理服务组件的
Spring IoC 容器负责向 Action 提供业务模型(Model)组件和该组件的协作对象数据处理
(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数
据的完整性。而在持久层中,则依赖于 Hibernate 的对象化映射和数据库交互,处理 DAO
组件请求的数据,并返回处理结果。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务
逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的
变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,
有利于团队成员并行工作,大大提高了开发效率。
Struts1 与 struts2 有什么不同
类•
Stuts1 要求 Action 类继承一个抽象基类。Struts1 的一个普通问题是使用抽
象类编程而不是接口。Struts2 Action 类可以实现一个 Action 接口,也可以
实现其它接口,使可选和定制的服务成为可能。Struts2 提供一个
ActionSupport 基类去实现常用的接口。Action 接口不是必须的,任何有
execute 标识的 POJO 对象都可以用作 Struts2 的 Action 对象。•
线程模式:Struts1 Action 是单例模式并且必须是线程安全的,因为仅有
Action 的一个实例来处理所有的请求。单例策略限制了 Struts1 Action 能作
的事,并且要在开发时特别小心。Action 资源必须是线程安全的或同步的。•
Struts 2 Action 对象为每一个请求产生一个实例,因此没有线程安全问题。•
依赖:Struts1 Action 依赖于 Servlet API,因为当一个 Action
被调用时,HttpServletResquest 和 HttpServletResponse 被传递给
execute 方法,即 Action 依赖了容器,测试变得非常麻烦。Struts2 Action
不依赖于容器,允许 Action 脱离容器单独被测试。如果需要,Struts2Action
仍然可以访问初始的 request 和 response。但是,其它的元素减少或者消除
了直接访问 HttpServletRequset 和 HttpServletResponse 的必要性。•4.捕
获输入:Struts1 使用 ActionForm 对象捕获输入。所有的 ActionForm 必须
继承一个基类。因为其它 JavaBean 不能用作 ActionForm,开发者经常创建
多余的类捕获输入。动态 Bean 可以作为创建传统 ActionForm 的选择,但是,
开发者可能是在重新描述已经存在的 JavaBean,仍然会导致有冗余的
javabean。Struts2 直接使用 Action 属性作为输入属性,消除了对第二输入
对象的需求。Action 属性能够通过 web 页面上的 taglibs 访问。Struts2 也支
持 ActionForm 模式。(Struts2 用普通的 POJO 来接收数据)•
表达式语言:Struts1 整合了 JSTL,但对集合和索引属性的支持很弱。
Struts2 可以是使用 JSTL,但是也支持一个更加强大和灵活的表达式语言•
“Object Graph Notation Language”(OGNL).
绑定值到页面():Struts1 使用标准 JSP 机制把对象绑定到页面中
来访问,Struts1 要传递值的时候必须往 request 里放、往 session 里放,然
后再传递到 jsp 里面,铜鼓 el 表达式得到。Struts2 使用“ValueStack”技术,
使 taglib 能够访问值而不需要把你的页面和对象绑定起来。ValueStack 策略
允许通过一系列名称相同但类型不同的属性重用页面。值栈技术非常著名。不
需要 request、不需要 session,直接从 Action 中取值。•
类型转换:•Struts1ActionForm 属性通常都是 String 类型。Struts1 使用
Commons-Beanutils 进行类型转换。每个类一个转换器,对每一个实例来说
是不可配置的。Struts2 使用 OGNL 进行类型转换。提供基本和常用对象的转
换器。
校验:Struts1 支持在 ActionForm 的 validate 方法中手动校验,或者通过
Commons Validator 的扩展来校验。同一个类可以有不同的校验内容,但不
能校验子对象。Struts2 支持通过 validate 方法和 Xwork 校验框架来进行校
验。Xwork 校验框架使用为属性类类型定义的校验和内容校验,来支持 chain
校验子属性。•
执行的控制:Struts1 支持每一个模块有单独的
RequestProcessors(生命周期),但是模块中的所有 Action 必须共享相同
的生命周期。(服务器重启时,Action 生命周期结束,即生命周期无法控制)。
Struts2 支持通过拦截器堆栈(Interceptor Stacks)为每一个 Action 创建
不同的生命周期。堆栈能够根据需要和不同的 Action 一起使用。(可以控制
Action 的生命周期)•
简单的说:
struts1 和 struts2 的核心原理不同:
struts1.X 是基于 servlet 的•
struts2 是 xwork 的变体:他的核心是 lter
struts1 是单例模式开发,•
struts2 是多例模式。•
struts1 的单例模式好处是节省内存,缺点是并发性查,非同步。•
struts2 好处是线程安全是同步的每次使用开辟新的内存空间,缺点是占用资
源多。
Model1 的原理:
Struts1 的工作原理:
图 2
它引入了"控制器"这个概念,控制器一般由 servlet 来担任,客户端的请求不
再直接送给一个处理业务逻辑的 JSP 页面,而是送给这个控制器,再由控制器
根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。因此,
这个 servlet 控制器为应用程序提供了一个进行前-后端处理的中枢。一方面为
输入数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点;
另一方面也提供了将业务逻辑从 JSP 文件剥离的可能。业务逻辑从 JSP 页面分
离后,JSP 文件蜕变成一个单纯完成显示任务的东西,这就是常说的 View。而
独立出来的事务逻辑变成人们常说的 Model,再加上控制器 Control 本身,就构
成了 MVC 模式。实践证明,MVC 模式为大型程序的开发及维护提供了巨大的
便利。•
其实,MVC 开始并不是为 Web 应用程序提出的模式,传统的 MVC 要求 M 将
其状态变化通报给 V,但由于 Web 浏览器工作在典型的拉模式而非推模式,很
难做到这一点。因此有些人又将用于 Web 应用的 MVC 称之为 MVC2。正如上
面所提到的 MVC 是一种模式,当然可以有各种不同的具体实现,包括您自己
就可以实现一个体现 MVC 思想的程序框架,Struts 就是一种具体实现 MVC2
的程序框架。它的大致结构如图三所示:•
图三•
图三基本勾勒出了一个基于 Struts 的应用程序的结构,从左到右,分别是其表
示层(view)、控制层(controller)、和模型层(Model)。其表示层使用
Struts 标签库构建。来自客户的所有需要通过框架的请求统一由叫
ActionServlet 的 servlet 接收(ActionServlet Struts 已经为我们写好了,
只要您应用没有什么特别的要求,它基本上都能满足您的要求),根据接收的
请求参数和 Struts 配置(struts-cong.xml)中 ActionMapping,将请求送给
合适的 Action 去处理,解决由谁做的问题,它们共同构成 Struts 的控制器。
Action 则是 Struts 应用中真正干活的组件,开发人员一般都要在这里耗费大
量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来
完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个
代表所需的描绘响应的 JSP(或 Action)的 ActionForward 对象给
ActionServlet 以将响应呈现给客户。•
过程如图四所示:•
剩余30页未读,继续阅读
资源评论
奋起直追的老白
- 粉丝: 2
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功