SSH 解说

来自:http://www.67tgb.com/?p=375

Struts

  Struts属于MVC框架,主要提供了Control层的解决方案。在struts中,主要了解struts工作流程,如下图所示

  这个工作流程非常类似我们去邮局寄信这一活动

  简单来说客户端发过来的请求,也就是信件。会首先到达Struts的核心的ActionServlet,这个Servlet就像邮局一样,分析信件地址(URL),根据这个地址去自己的通讯录(Struts-config.xml)中找到某个辖区的邮递员(Action)后,将信件分发(Dispatch)给邮递员Action,Action会将信件送达后(Model层处理完之后),将成功或者失败的信息告知邮局ActionServlet,邮局会根据相应的信息forward到不同回执信息通知客户。

  可以说struts的核心就是提供了一个功能完善的邮局系统,我们要做的主要工作就是:

    1. 配置好struts-config.xml ,让邮局ActionServlet知道有哪些邮递员Action在工作,能够处理那些Url请求 。这些请求处理完成后,应该forward到哪一个页面

    2. 编写Action ,就好像你需要雇佣邮递员来完成信件的处理,调用不同的Model来完成业务

    3. 编写ActionForm ,这个就是信纸了,用来承载客户输入的信息。

  在这里我们很容易看出Struts解决了一个很重的问题那就是请求的统一调度

 

Hibernate

  Hibernate相对struts就复杂了一些,他完成的主要功能是完成ORM(Object/Relationship Mapping) 对象关系映射功能。

  啥是ORM呢,我们都知道目前的软件开发大都是采用面向对象的开发方式,采用关系数据库来存储数据。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中, 关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统出现啦,它一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

  Hibernate解决了什么问题呢,简单的说,让我们通过操纵业务实体对象,完成对数据库记录的增删改查。

  没有ORM这个概念之前,我们的DAL层都是这样处理的:将业务实体对象中的数据一项一项,像剥衣服一样取出来,这个过程叫拆箱。然后拼装成SQL语句,交给ODBC或者JDBC去执行。

  现在呢,这个拆箱过程不用我们来做了,SQL语句也不用我们来拼写了,Hibernate保证给它一个活蹦乱跳(transient状态)的对象,还你一条静悄儿悄(Persistent状态)的数据库记录,只需专注业务的开发即可。附图

图 Hibernate中对象的三种状态

  更为神奇的是,Hibernate居然会说方言,无论是Mysql,Oracle,还是DB2 都能很好的交流。

  Hibernate最大的特性就是通过大量的配置,提高了灵活性。但是凡事有利必有弊,太灵活了会让人无所适从。

  光是主键生成策略就有七八种方案有木有;

  集合属性可以用List,可以用Set,还可以用Bag 有木有;

  复合主键可以在hbm文件里配置,也可以自定义CustomerType有木有啊;

  一个继承关系可以生成一张表,也可以生成两张表,还可以生成三张表,你不怕超生啊!

  什么情况下那种方案最好,效率最高,有何区别,不用费脑细胞想想啊

  尼玛头发都快掉没了有木有……

  面对xml文档的过度泛滥,人们不得不提出了“约定优于配置”的建议,也就是使用规则,让Hibernate的可以通过模糊匹配读取配置文件,来减少配置量,当然还有其他减少配置的方法。

  Hibernate核心在于配置,需要多加实践,积累项目经验,才能快速确定最优配置。上面的问题其实都有答案的……

Spring

  Spring是春天的意思,万物复苏,该框架的命名也是源于此意(个人YY哈),主要负责对象的创建,声明式服务管理。

  Spring的两大特性:IOC (Inversion of Control)控制反转和 AOP(Aspect oriented programming)面向切面编程

  1. IOC

  所谓控制反转是介个意思:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。

  简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,就是所谓的反转。

  反转的好处在哪里呢?解耦 !还记得我们用工厂来封装对象的创建吗,原理是一样的,Spring的核心其实就是工厂,将对象创建完成后,通过类的构造函数或者setter()注入给你。

  2. AOP

  面向切面的编程可以说是OO编程的补充,在编码过程中,人们逐渐发现一些共性的服务可以抽取出来,比如日志记录,安全控制等等,这些方法遍布程序的各个角落,与业务逻辑代码并没有关系,Don’t Repeat Yourself ,于是提出了一种切面式的编程方法。将这些行为分离。如图

  GOF中有一种设计模式是代理模式,代理模式可以为其他对象提供一种代理以控制对这个对象的访问。而AOP的实现则是使用了类似的思路。

  主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。

  下面这张图总结了SSH框架在J2EE三层架构中的分布情况,接下来我们将会通过一个项目来实践一下SSH框架的应用。

总结:

  SSH属于框架,属于工具,使用它们来提高开发效率,提高软件产品的可维护性、可扩展性乃至敏捷性。好吧,这句万金油的话,或许用到任何技术上都能成立,但是只有你亲自实践过才能有深刻的体会。SSH里面有很多优秀的设计理念及模式应用,这才是要学习的核心。不久的一天你要能够自己开发框架……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值