Struts/Spring/Hibernate三大开源框架底层机制以及原理

Struts1的工作原理Struts1工作原理图:1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想)2、发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的...
摘要由CSDN通过智能技术生成


Struts1的工作原理

Struts1工作原理图:


1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想)

2、发送请求:用户提交表单或通过URLWEB服务器提交请求,请求的数据用HTTP协议传给web服务器。

3form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。

4、派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。

5、处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过ActionForward对象进行转发工作。

6、返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。

7、查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。

8、响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。

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

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

  采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。

Struts1struts2有什么不同

1.Action
 Stuts1
要求Action类继承一个抽象基类。Struts1的一个普通问题是使用抽象类编程而不是接口。Struts2 Action类可以实现一个Action接口,也可以实现其它接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action 接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2Action对象。

2. 线程模式:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

3.Servlet依赖:Struts1 Action依赖于Servlet API,因为当一个Action被调用时,HttpServletResquestHttpServletResponse被传递给execute方法,即Action依赖了容器,测试变得非常麻烦。Struts2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的requestresponse。但是,其它的元素减少或者消除了直接访问HttpServletRequsetHttpServletResponse的必要性。 4.捕获输入:Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其它JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述已经存在的JavaBean,仍然会导致有冗余的javabeanStruts2直接使用Action属性作为输入属性,消除了对第二输入对象的需求。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。(Struts2用普通的POJO来接收数据)

5.表达式语言:Struts1整合了JSTL,但对集合和索引属性的支持很弱。Struts2可以是使用JSTL,但是也支持一个更加强大和灵活的表达式语言“Object Graph Notation Language”(OGNL).

6. 绑定值到页面(view: Struts1使用标准JSP机制把对象绑定到页面中来访问,Struts1要传递值的时候必须往request里放、往session里放,然后再传递到jsp里面,铜鼓el表达式得到。Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面。值栈技术非常著名。不需要request、不需要session,直接从Action中取值。

7.类型转换: Struts1 ActionForm属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
 

8.校验:Struts1支持在ActionFormvalidate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。Struts2支持通过validate方法和Xwork校验框架来进行校验。Xwork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。

9.Action执行的控制:Struts1支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。(服务器重启时,Action生命周期结束,即生命周期无法控制)。Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。(可以控制Action的生命周期)

简单的说:
struts1
struts2的核心原理不同:
struts1.X
是基于servlet

struts2
xwork的变体:他的核心是
filter
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的程序框架。它的大致结构如图三所示:

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值