SSh三大框架工作原理介绍

Posted 官小飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSh三大框架工作原理介绍相关的知识,希望对你有一定的参考价值。

Struts1工作原理

Struts1工作原理图

1 、初始化: struts 框架的总控制器 ActionServlet 是一个 Servlet ,它在 web.xml 中配置成自动启动的 Servlet ,在启动时总控制器会读取配置文件 (struts-config.xml) 的配置信息,为 struts 中不同的模块初始化相应的对象。 ( 面向对象思想 )
 
2 、发送请求:用户提交表单或通过 URL WEB 服务器提交请求,请求的数据用 HTTP 协议传给 web 服务器。
 
3 form 填充: struts 的总控制器 ActionServlet 在用户提交请求时将数据放到对应的 form 对象中的成员变量中。
 
4 、派发请求:控制器根据配置信息对象 ActionConfig 将请求派发到具体的 Action ,对应的 formBean 一并传给这个 Action 中的 excute() 方法。
 
5 、处理业务: Action 一般只包含一个 excute() 方法,它负责执行相应的业务逻辑 ( 调用其它的业务模块 ) 完毕后返回一个 ActionForward 对象。服务器通过 ActionForward 对象进行转发工作。
 
6 、返回响应: Action 将业务处理的不同结果返回一个目标响应对象给总控制器。
 
7 、查找响应:总控制器根据 Action 处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为 jsp 页面。
 
8 、响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。
Struts1优缺点(为什么要用strust1
1. 优点: 
  ① 开源的框架,结构清晰 
  ② MVC 的经典实现( MVC 是一种思想,而不是一种技术) 
  ③ 处理异常机制,实现国际化 
  ④ 具有强大的标签库 
  ⑤ 解决了 JSP 页面存在大量的 JAVA 代码,维护起来方便 
  ⑥ formBean 中会自动提交,不会去使用传统的 get set 方法得到值、取值 

2. 缺点: 
  ① 配置复杂 
  ② 测试不方便 
  ③ 依赖 web 容器 
  ④action 是一个单例模式,必须设置为线程安全 


Struts2工作原理

struts2工作原理图

客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
这个请求经过一系列的过滤器( Filter (这些过滤器中有一个叫做 ActionContextCleanUp 的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
接着 FilterDispatche r 被调用,FilterDispatcher询问 ActionMapper 来决定这个请是否需要调用某个Action 
如果ActionMapper决定需要调用某个ActionFilterDispatcher把请求的处理交给 ActionProxy 
5 ActionProxy通过 Configuration Manager 询问框架的配置文件,找到需要调用的Action类 
6 ActionProxy创建一个 ActionInvocation 的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用 Action 的过程前后,涉及到相关拦截器( Intercepter )的调用。 
一旦Action执行完毕,ActionInvocation负责根据 struts.xml 中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 

在上述过程中所有的对象( Action Results Interceptors ,等)都是通过 ObjectFactory 来创建的
Struts2 优缺点(即为什么要用 struts2
Struts2 就会自动的进行验证。还有很多,比如国际化资源文件等。 
Struts2 的开发中来,如果你重来没有用过任何框架,你也可以通过快速的学习,加入到 Struts2 的应用开发中来,因为它足够的简单。 
大量的拦截器:
Struts2 本身提供了大量的可重用的拦截器,比如类型转换拦截器,很多时候我们从页面取得参数,这个时候它是 String 类型的,我们需要手动。
基于插件的框架:
Struts2 是一个基于插件的框架,社区中提供了很多实用的插件,比如 jfreechat/json 等等,使用这些插件可以简化我们的开发,加快开发进度。
struts2 最大的缺点莫过于在好多 web 服务器上支持不好,例如在 websphere5.5,weblogic8.1 及以前版本支持非常查,需要用最新的。
多种视图的支持:
多种视图的支持: jsp freemarker Veloctiy ,只要你愿意,你甚至可以通过轻松的改造让它支持 pdf ,同一个项目中你可以支持多种视图。
更加的模块化:
Struts1.X  相比, Struts2 更加的模块化,可以轻松将配置信息按功能界限拆分成多个文件,便于管理和团队协作开发。
Spring的集成:
Struts1.x 相比, Struts2 不必再自己编写 singleton ,进一步的降低了程序间的耦合性,就 Struts2 内部本身而言,降低了框架本身的偶合性。
基于pojo易于测试:
Struts1.x 中我需要 Mock 出这两个 Http 对象,使我们很难编写 Action 的单元测试,与 Struts1.x 相比, Struts2 Action  不再依赖于 HttpServletRequest HttpServletResponse 对象,使我们能够更方便的针对 Action 编写单元测试。

 


Hibernate工作原理

1.  读取并解析配置文件
2.  读取并解析映射信息,创建 SessionFactory
3.  打开 Sesssion
4.  创建事务 Transation
5.  持久化操作
6.  提交事务
7.  关闭 Session
8.  关闭 SesstionFactory

Hibernate 优缺点
优点: 
1: hibernate是基于ORMapping技术的开源的框架,对JDBC进行了轻量级的封装,使用面向对象的思维来操纵数据库。 
2hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。 
3:低侵入式设计 

缺点: 
1hibernate学习成本太高。 
2:不适合有复杂的sql查询(统计) 。 
3:不适合大量的聚集操作,(存储过程)
优缺点补充:
1 、  不需要编写的SQL语句 ( 不需要编辑 JDBC) ,只需要操作相应的对象就可以了,就可以能够存储、更新、删除、加载对象,可以提高生产效; 
2 、因为使用 Hibernate 只需要操作对象就可以了,所以我们的开发更对象化了; 
3 使用Hibernate,移植性好 ( 只要使用 Hibernate 标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的操作 ) ; 
4 Hibernate 实现了透明持久化 当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,只是个纯粹的单纯对象称为POJO对象 ( 最纯粹的对象 这个对象没有继承第三方框架的任何类和实现它的任何接口
5 Hibernate是一个没有侵入性的框架,没有侵入性的框架我们一般称为轻量级框架 
6 Hibernate 代码测试方便。


Spring工作原理

内部最核心的就是 IOC 了, 

动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring

的配置 文件来动态的创建对象,和调用对象里的方法的 。 

Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个

模块扩充的功能。这些都是通过 配置类达到的。 

Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象) 

要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 

Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式) 

Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.


Spring AOP IOC
一、  IoC(Inversion of control):  控制反转 
1 IoC : 

概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 

核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean 

二、 AOP(Aspect-Oriented Programming):  面向方面编程 
1 、 代理的两种方式: 
静态代理: 
  • 针对每个具体类分别编写代理类
  • 针对一个接口编写一个代理类
动态代理: 

针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类


Spring 优缺点

它是一个开源的项目,而且目前非常活跃;它基于 IoC Inversion of Control ,反向控制)和 AOP 的构架多层 j2ee 系统的框架,但它不强迫你必须在每一层 中必须使用 Spring ,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的 MVC ,对不同的数据访问技术提供了统一的 接口,采用 IoC 使得可以很容易的实现 bean 的装配,提供了简洁的 AOP 并据此实现 Transcation Managment ,等等
优点 

  1.  Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的frameworkSpring致力于解决剩下的问题。 
  2. Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。 
  3. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属
  4. 性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。 
  5. 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。 
  6. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。 
  7. 使用Spring构建的应用程序易于单元测试。 
  8. Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOslocal EJBs来实现业务接口,却不会影响调用代码。 
  9. Spring帮助你解决许多问题而无需使用EJBSpring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。 
  10. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。 

Spring 确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。

以上是关于SSh三大框架工作原理介绍的主要内容,如果未能解决你的问题,请参考以下文章

SSH三大框架的原理

SSH三大框架的原理和核心(转)

ssh中 三大框架的各自的作用及好处

ssh 运行流程

第三周作业 邱鹏 2013551628

SSH框架第三季 - Spring5入门与三大框架整合