综合论述SSH的优缺点

lichuanlong00 2014-04-02

SSH 为 struts + spring+hibernate 3个框架组成

Struts2

struts2和struts1的区别为:

1.struts1是线程安全的,struts2因为每一个请求都产生一个实例,所以没有线程安全的问题。

2.struts1要求继承一个基类,Struts 2提供一个ActionSupport基类去实现常用的接口。

3.struts1有from类和action类,属性封装from类里,在struts2里只有action类,属性封装action类里。
4.struts1中强制使用ActionForm对象封装请求的参数。Struts2可以选择使用javabean来封装请求的参数,或者直接使用Action的属性。
5.在Struts1 中,由一个名为 ActionServlet 的 Servlet 充当 控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的 struts-config.xml 的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。

        Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

       核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。

 

在Struts2框架中的处理大概分为以下几个步骤 

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

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

  3 接着FilterDispatcher被调用,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。

   struts2的优点:

1.使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;

2.struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。

Spring

spring是一个开源的用于简化采用Java语言开发企业级程序的一个分层的框架。

为什么要使用Spring?

  (1) 简化企业级开发

    ①封装了大部分的企业级服务,提供了更好的访问这些服务的方式

    ②提供了IOC,AOP功能的容器,方便编程

  (2) 遵循Spring框架的应用程序,一定是设计良好的,针对接口编程,这样就简化了企业级程序的设计。

  (3) Spring的组成

    ① Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能

    SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。

    ② Spring AOP:提供切面支持

    ③ Spring DAO:提供事务支持,JDBC,DAO支持

    ④ Spring ORM:对流行的O/R Mapping封装或支持

    ⑤ Spring Web:提供Web应用上下文,对Web开发提供功能上的支持,如请求,表单,异常等。

    ⑥ Spring Web MVC:全功能MVC框架,作用等同于Struts。

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

Hibernate

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

   

Hibernate的原理及步骤

  1. 读取并解析配置文件

  //采用默认的hibernate.cfg.xml来启动一个Configuration的实例

  例:Configuration configuration=new Configuration().configure();

  //如要修改默认配置文件名 当然你可以选择不修改

  Configuration configuration=new Configuration().configure(new File("src/xxx.xml"));

  2. 读取并解析映射信息,创建SessionFactory

  例:SessionFactory  sessionFactory = configuration.buildSessionFactory();

  3. 打开Session实例(它是线程不安全的,是共享同一个session,所以要ThreadLocal模式来控制)

  例:Session session = sessionFactory.openSession();

  4. 创建事务Transaction

  例:Transaction transaction = (Transaction) session.beginTransaction();

  5. CRUD操作(执行数据操作 CRUD 增删查改)

  例: 增加

      session.save(pojo对象);

      增加或者修改

      session.saveOrOpdate(pojo对象)//当修改时候,id不存在将被抛出异常

                     删除

                     session.delete(pojo对象)

      //根据主键加载

                    p1=(Person)session.load(pojo类.class, 主键值);

  6. 提交事务

  例:transaction.commit();

  7. 关闭Session实例及SessionFactory

  例:   session.close();

               sessionFactory.close();

为什么使用Hibernate?

1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2、Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。

3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

重要的概念:

    1、lazy的概念,指在需要的时候才发出sql

    2、lazy策略只是在session打开期间才是有效的

    3、Hibernate加载本身就是延迟加载,在*.hbm.xml配置文件中<class>里配置lazy="false"将其改

  为非延迟加载。

    4、Hibernate属性的延迟加载,在*.hbm.xml配置文件中<property>里配置lazy="false"即可。

   注意:类的延迟加载并不影响属性的延迟加载;

Hibernate配置二级缓存见附件

ssh优点

    1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。

    2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。

    3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;

       采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等

相关推荐