实习(九)struts2,hibernate与spring

来源:互联网 发布:c高级编程第9版 中文 编辑:程序博客网 时间:2024/06/06 20:49

    最近一段时间一直在深化ssh三大框架的学习,基本上一个星期学完一个框架。以前也用过这三个框架,但不理解其内部机制。以前我很不喜欢用框架来形容这三个框架,因为我觉得这三个架构就像是外来引入的api一样,只是一套api而已。其实之所以称之为框架,是因为它不仅提供接口,类和方法,更重要的是它内部会帮你做很多事。这就是框架。

    struts的核心就是拦截器。几乎struts所有的功能都是由拦截器来实现的。一个页面请求通过FilterDispatcher分发到指定位置,查找相应的配置文件,配置文件里struts内部的interceptors会依据相应的规则形成不同的相应。

 一、 sturts2的执行流程
        struts2框架主要包含3个部分,核心控制器filterDispatcher、业务控制器Action和用户自己实现的业务逻辑组件。其中filterDispatcher是sturts2的核心,包含了内部控制流程和处理机制业务控制器Action和业务逻辑组件需要用户自己实现,用户还需编写sturts.xml配置文件,供filterDispatcher来使用。
    (1)、客户端发出http请求
    (2)、根据web.xml,该请求被filterDispatcher接收
    (3)、根据struts.xml配置文件调用相应的Action类和方法
    (4)、action处理完成后,根据struts.xml找到相应的result,并跳转至相应界面
    (5)、返回http响应到客户端
二、struts2的优点(为什么要使用它)
    1、基于MVC架构,框架结构清晰
    2、使用OGNL表达式,OGNL可以快速方便的访问值栈中的数据,调用值栈中对象的方法。
    3、拦截器,拦截器是一个action级别的AOP,sturts2中很多特性都是通过拦截器来实现的,比如异常处理、文件上传、验证等功能,并且拦截器可以被复用
    4、多种表现层技术,比如jsp、freemark、velocity等
三、拦截器和过滤器的区别
    1、拦截器不需要依赖servlet容器,过滤器依赖于servlet容器
    2、拦截器只能作用于act
ion请求,过滤器可以作用于所有请求
    3、拦截器能访问上下文和值栈中的对象,过滤器不能
    4、在Action生命周期中,拦截器可以被调用多次,而过滤器只能在容器初始化时被调用一次
四、谈谈ValueStack(值栈)
    1、valueStack贯穿整个Action生命周期,保存在request域中,所以valueStack的生命周期和request相同。Action实例存放在valueStack中,所以OGNL才能访问action实例。当struts2接收到一个请求时,迅速创建ActionConext、Action和ValueStack。然后将Action放入ValueStack中。请求结束时,valueStack、request、以及action生命周期随之结束。
    2、valueStack是多实例的, 因为action是多实例,action和valueStack是一一对应的。
    3、使用OGNL访问值栈时无需"#"符号,而访问request、session、application的atrr时需要。
    4、ValueStack底层实际上是ArrayList。

    hibernate是对象关系映射目的是把数据库中的表映射成程序中的对象,这样程序对数据库的操作就是通过对象而不是数据本身。

   一、 ORM和Hibernate的相关知识(理解)
    1) ORM:Object Relational Mapping
       对象-关系映射实现了面向对象世界中对象到关系数据库中的表的自动的(和透明的)持久化,
       使用元数据(meta data)描述对象与数据库间的映射。
    2) Hibernate是非常优秀、成熟的O/R Mapping框架。它提供了强大的对象和关系数据库映射以及查询功能。
    规范:
        1.一个映射文件对应一个持久类(一一对应) 
        2.映射文件的名字和它所描述的持久类的名字保持一致
        3.映射文件应该与它所描述的类在同一包中
    po -> (pojo) 
       -> oid(唯一,中性) 
       -> getters/setters
       -> 构造方法
   二、Hibernate核心API(理解)
    Configuration类:
        Configuration对象用于配置和启动Hibernate。Hibernate应用通过Configuration实例来指定对象-关系映射文
        件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。
    SessionFactory接口:
        一个SessionFactory实例对应一个数据存储源。应用从SessionFactory中获取Session实例。
        1)它是线程安全的,这意味着它的一个实例能够被应用的多个线程共享。
        2)它是重量级的,这意味着不能随意创建或者销毁,一个数据库只对应一个SessionFactory。
          通常构建SessionFactory是在某对象Bean的静态初始化代码块中进行。
          如果应用只是访问一个数据库,只需创建一个SessionFactory实例,并且在应用初始化的时候创建该实例。
          如果应用有同时访问多个数据库,则需为每个数据库创建一个单独的SessionFactory。
    Session接口:
        是Hibernate应用最广泛的接口。它提供了和持久化相关的操作,如添加,删除,更改,加载和查询对象。
        1)它是线程不安全的,因此在设计软件架构时,应尽量避免多个线程共享一个Session实例。
        2)Session实例是轻量级的,这意味着在程序可以经常创建和销毁Session对象,
          例如为每个客户请求分配单独的Session实例。
          原则:一个线程一个Session;一个事务一个Session。
    Transaction接口:
        是Hibernate的事务处理接口,它对底层的事务接口进行封装。
    Query和Criteria接口:
        这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。
        Query实例包装了一个HQL查询语句。
        Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更面向对象。Criteria更擅长于执行动态查询。
        补充:find方法也提供数据查询功能,但只是执行一些简单的HQL查询语句的快捷方式(已过时),远没有Query接口强大!

    spring的核心是对象工厂。只有在配置文件中配置了其bean spring容器就会创建其对象。换句话说spring是对象管理器。

        Spring的基本结构(看图)



       a)      SpringCore:核心容器,提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
       b)     SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,如提供了JNDI,EJB,RMI的支持。
      c)      SpringAOP:通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB组件,就可以将声明性事务管理集成到应用程序中,我们主要应用的就是它的声明式事务的能力。
       d)     SpringDAO:JDBC 、DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
       e)      Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JPA、TopLick、OJB、JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
       f)       SpringWeb 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
       g)      SpringMVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
总结:Spring对企业级服务进行了进一步的封装,简化了企业级开发。同时采用它也就意味着进行了良好的分层设计,并保证了面向接口编程,加上它的IoC和AOP容器的优势,更加方便我们后期的维护工作,但是由于容器大量的使用反射机制装配对象,一定会影响性能,对于一些高并发的大型应用我们还是要慎用。

0 0
原创粉丝点击