0
点赞
收藏
分享

微信扫一扫

SSh三大框架工作原理介绍


Struts1工作原理


Struts1工作原理图


SSh三大框架工作原理介绍_Spring


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工作原理图


SSh三大框架工作原理介绍_Hibernate_02


1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 


2 这个请求经过一系列的过滤器( Filter) (这些过滤器中有一个叫做 ActionContextCleanUp 的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 


3 接着 FilterDispatche r 被调用,FilterDispatcher询问 ActionMapper 来决定这个请是否需要调用某个Action 


4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给 ActionProxy 


5 ActionProxy通过 Configuration Manager 询问框架的配置文件,找到需要调用的Action类 


6 ActionProxy创建一个 ActionInvocation 的实例。 


7 ActionInvocation实例使用命名模式来调用,在调用 Action 的过程前后,涉及到相关拦截器( Intercepter )的调用。 


8 一旦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进行了轻量级的封装,使用面向对象的思维来操纵数据库。 


2:hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。 


3:低侵入式设计 



缺点: 


1:hibernate学习成本太高。 


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

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

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

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

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


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

举报

相关推荐

0 条评论