Struts一、Struts二、Hibernate、Spring框架工做原理介绍

Struts1工做原理

Struts1工做原理图


1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不一样的模块初始化相应的对象。(面向对象思想)
 
2、发送请求:用户提jiāo表单或经过URLWEB服务器提jiāo请求,请求的数据用HTTP协议传给web服务器。
 
3form填充:struts的总控制器ActionServlet在用户提jiāo请求时将数据放到对应的form对象中的成员变量中。
 
4、派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。
 
5、chǔ理业务:Action通常只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器经过ActionForward对象进行转发工做。
 
6、返回响应:Action将业务chǔ理的不一样结果返回一个目标响应对象给总控制器。
 
7、查找响应:总控制器根据Actionchǔ理业务返回的目标响应对象,找到对应的资源对象,通常状况下为jsp页面。
 
8、响应用户:目标响应对象将结果传递给资源对象,将结果展示给用户。
Struts1优缺点(为何要用strust1)
1.优势: 
  ①开源的框架,结构清晰 
  ②MVC的经典实现(MVC是一种思想,而不是一种技术) 
  ③chǔ理异常机制,实现国际化 
  ④具备强大的标签库 
  ⑤解决了JSP页面存在大量的JAVA代码,维hù起来方便 
  ⑥formBean中会自动提jiāo,不会去使用传统的getset方法获得值、取值  
2.缺点: 
  ①配置复杂 
  ②测试不方便 
  ③依赖web容器 
  ④action是一个单例模式,必须设置为线程安全  java

Struts2工做原理

struts2工做原理图


1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
2 这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个jiào作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否须要调用某个Action 
4 若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的chǔ理jiāo给ActionProxy 
5 ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类 
6 ActionProxy建立一个ActionInvocation的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。 
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果一般是(但不老是,也可 能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程当中可使用Struts2 框架中继承的标签。在这个过程当中须要涉及到ActionMapper  
在上述过程当中全部的对象(ActionResultsInterceptors,等)都是经过ObjectFactory来建立的
Struts2优缺点(即为何要用struts2
Struts2就会自动的进行验证。还有不少,好比国际化资源文件等。 
Struts2的开发中来,若是你重来没有用过任何框架,你也能够经过快速的学xí,加入到Struts2的应用开发中来,由于它足够的简单。 
大量的拦截器:
Struts2自己提供了大量的可重用的拦截器,好比类型转换拦截器,不少时候咱们从页面取得参数,这个时候它是String类型的,咱们须要手动。
基于插件的框架:
Struts2是一个基于插件的框架,社区中提供了不少实用的插件,好比jfreechat/json等等,使用这些插件能够简化咱们的开发,加快开发进度。
struts2最大的缺点莫过于在好多web服务器上支持很差,例如在websphere5.5,weblogic8.1及之前版本支持很是查,须要用最新的。
多种视图的支持:
多种视图的支持:jspfreemarkerVeloctiy,只要你愿意,你甚至能够经过轻松的改造让它支持pdf,同一个项目中你能够支持多种视图。
更加的模块化:
Struts1.X 相比,Struts2更加的模块化,能够轻松将配置信息按功能界限拆分红多个文件,便于管理和团队协做开发。
与Spring的集成:
Struts1.x相比,Struts2没必要再本身编写singleton,进一步的下降了程序间的耦合xìng,就Struts2内部自己而言,下降了框架自己的偶合xìng。
基于pojo易于测试:
Struts1.x中我须要Mock出这两个Http对象,使咱们很难编写Action的单元测试,与Struts1.x相比,Struts2Action 再也不依赖于HttpServletRequestHttpServletResponse对象,使咱们可以更方便的针对Action编写单元测试。 
  web

Hibernate工做原理

1. 读取并解析配置文件
2. 读取并解析映射信息,建立SessionFactory
3. 打开Sesssion
4. 建立事务Transation
5. 持久化操做
6. 提jiāo事务
7. 关闭Session
8. 关闭SesstionFactory 
Hibernate优缺点
优势: 
1: hibernate是基于ORMapping技术的开源的框架,对JDBC进行了轻量级的封装,使用面向对象的思惟来操纵数据库。 
2:hibernate提供了session缓存和二级缓存,对于不须要进行复杂查询的系统,xìng能有提高。 
3:低侵入式设计  
缺点: 
1:hibernate学xí成本过高。 
2:不适合有复杂的sql查询(统计) 。 
3:不适合大量的汇集操做,(存储过程)
优缺点补充:
1、 不须要编写的SQL语句(不须要编辑JDBC),只须要操做相应的对象就能够了,就能够可以存储、更新、删除、加载对象,能够提升生产效; 
2、由于使用Hibernate只须要操做对象就能够了,因此咱们的开发更对象化了; 
3使用Hibernate,移植xìng好(只要使用Hibernate标准开发,更换数据库时,只须要配置相应的配置文件就能够了,不须要作其它任务的操做); 
4Hibernate实现了透明持久化当保存一个对象时,这个对象不须要继承Hibernate中的任何类、实现任何接口,只是个纯粹的单纯对象—称为POJO对象(最纯粹的对象这个对象没有继承第三方框架的任何类和实现它的任何接口
5Hibernate是一个没有侵入xìng的框架,没有侵入xìng的框架咱们通常称为轻量级框架 
6Hibernate代码测试方便。 sql

Spring工做原理

内部最核心的就是IOC了, 
动态注入,让一个对象的建立不用new了,能够自动的生产,这其实就是利用java里的反射 
反射其实就是在运行时动态的去建立、调用对象,Spring就是在运行时,跟xml Spring的配置 
文件来动态的建立对象,和调用对象里的方法的 。 
  Spring还有一个核心就是AOP这个就是面向切面编程,能够为某一类对象 进行监督和控制(也就是 
在调用这类对象的具体方法的先后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是经过 
配置类达到的。 
  Spring目的:就是让对象与对象(模块与模块)之间的关系没有经过代码来关联,都是经过配置类说明 
管理的(Spring根据这些配置 内部经过反射去动态的组装对象) 
  要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很经常使用的设计模式) 
  Spring里的配置是不少的,很难都记住,可是Spring里的jīng华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring. 
Spring AOPIOC
1、 IoC(Inversion of control): 控制反转 
1IoC: 
概念:控制权由对象自己转向容器;由容器根据配置文件去建立实例并建立各个实例之间的依赖关系 
核心:bean工厂;在Spring中,bean工厂建立的各个实例称做bean 
2、AOP(Aspect-Oriented Programming): 面向方面编程 
1、 代理的两种方式: 
静态代理: 
针对每一个具体类分别编写代理类; 
针对一个接口编写一个代理类; 
动态代理: 
针对一个方面编写一个InvocationHandler,而后借用JDK反射包中的Proxy类为各类接口动态生成相应的代理类
Spring 优缺点 
它是一个开源的项目,并且目前很是活跃;它基于IoCInversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,由于它模块化的很好,容许你根据本身的须要选择使用它的某一个模块;它实现了很优雅的MVC,对不一样的数据访问技术提供了统一的 接口,采用IoC使得能够很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等
优势 
a. Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。若是你仅仅使用了Struts或其余为J2EE的 API特制的frameworkSpring致力于解决剩下的问题。 
b. Spring能消除在许多工程中常见的对Singleton的过多使用。根据个人经验,这是一个很大的问题,它下降了系统的可测试xìng和面向对象的程度。 
c. 经过一种在不一样应用程序和项目间一致的方法来chǔ理配置文件,Spring能消除各类各样自定义格式的属xìng文件的须要。曾经对某个类要寻找的是哪一个魔法般的属xìng项或系统属xìng感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅须要看看类的JavaBean属xìng。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。 
d. 经过把对接口编程而不是对类编程的代价几乎减shao到没有,Spring可以促进养成好的编程xí惯。 
e. Spring被设计为让使用它建立的应用尽量shao的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。 
f. 使用Spring构建的应用程序易于单元测试。 
g. Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOslocal EJBs来实现业务接口,却不会影响调用代码。 
h. Spring帮助你解决许多问题而无需使用EJBSpring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明xìng事务管理而不经过EJB容器,若是你仅仅须要与单个数据库打jiāo道,甚至不须要一个JTA实现。 
i. Spring为数据存取提供了一个一致的框架,不管是使用的是JDBC仍是O/R mapping产品(如Hibernate)。 
Spring确实使你能经过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。 
缺点:jsp中要写不少代码、控制器过于灵活,缺shao一个公用控制器数据库

相关文章
相关标签/搜索