Spring Struts Hibernate的工做流程

其实这个知识点已经在个人博客:Spring必备知识中提到了,可是比较分散,这里整理出单独一篇文章。前端

Spring Web MVC 处理Http请求的大体过程: 


    一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet能够认为是Spring提供的前端控制器,全部的请求都有通过它来统一分发。 在DispatcherServlet将请求分发给Spring Controller以前,须要借助于Spring提供的HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它可以完成客户请求到Controller之间的映射。在Struts中,这种映射是经过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。 web

    Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller相似于struts的Action,可以接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于
org.springframework.web.servlet.mvc包中。因为Controller须要为并发用户处理上述请求,所以实现Controller接口时,必须保证线程安全而且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。 一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器spring

    ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程当中的控制器,而ModelAndView是Http请求过程当中返回的模型和视图。前端控制器返回的视图能够是视图的逻辑名,或者实现了View接口的对象。View对象可以渲染客户响应结果。其中,ModelAndView中的模型可以供渲染View时使用。借助于Map对象可以存储模型。 
    若是ModelAndView返回的视图只是逻辑名,则须要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。 DispatcherServlet将View对象渲染出的结果返回个客户。数据库

struts2的主要工做流程

 
首先有一个http请求,这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin),而后进入struts2的控制核心FilterDispatcher; FilterDispatcher询问ActionMapper,来判断此请求是否须要struts2处理,若是须要,那么由ActionProxy来接管,经过配置管理找到struts.xml,而后进入ActionInvocation,通过拦截器,进入action,从而根据返回的result选择咱们要的页面,在拦截器的前半部分去值栈中取值经过标签展现在页面上,最后生成response返回 。缓存

Hibernate的工做流程:  

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

Hibernate中bean 的三种状态  


Hibernate对象分为三种状态:瞬时态(new 出来的或者实例化时session无关的),持久态(session关联)与游离态(曾经与session关联)。其中持久态的对象是PO,瞬时态、托管态的对象可做为VO。(PO不该该直接用做v层)因此在使用中应该注意三态的转化。如:在进行数据操做的一系列过程当中,save或者saveorupdate操做能够把瞬时态或者游离态的对象转换成持久态,而delete或者session的close、flush等操做将会把session相关联的持久态对象转换成游离态。 安全


Hibernate对象的状态和生命周期 


使用new操做符初始化的对象是一个瞬时态的(Transient)(没有任何跟数据库表相关联的行为,只要应用再也不引用这些对象,它们的状态就会丢失,并由垃圾回收机制回收);瞬时态对象通过save(),saveOrUpdate会转换成持久态,由session统一管理,持久态对象的操做与数据库同步;持久态对象通过evict(),close(),clear()等会转换成游离态,这时虽然被持久化,可是不在session缓存中,经过lock(),update(),saveOrUpdate又会转换成持久态。 经过get(),load(),find(),iterate()得到的对象直接就是持久态的。session

相关文章
相关标签/搜索