【SSH】框架简介

是什么

  我们常说的ssh,通常为ssh协议(Secure Shell Protocol安全外壳协议)或者ssh框架(集成struts+spring+hibernate)。本篇博文我们主要来学习ssh框架,它是目前比较流行的一种Web应用程序开源框架,Struts进行流程控制,Spring进行业务流转,Hibernate进行数据库操作的封装。

总体结构

  ssh框架,分为表现层、业务逻辑层、持久层。其中表现层Struts采用JSP技术,业务逻辑层Spring为了解耦,分为Web层、Service层和Dao层,持久层Hibernate负责与数据库有关的操作。
  

由什么组成

一.Struts

(1)Struts1
  Struts是一个轻量级的主流框架,分为Struts1和Struts2,它们都是遵循MVC思想的开源框架。
  Struts1是真正意义上的MVC模式,但在性能、耦合、侵入方面存在不足。Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts 1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。首先,Struts1支持的表现层技术单一,它不可能与这些视图层的模版技术进行整合。其次,Struts1与Servlet API的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。
(2)Struts2  
  为了解决Struts1的不足之处,Struts2应运而生,但Struts2不简单是Struts1的升级版,而是一个全新的框架,它将Struts技术与WebWork技术完美的结合起来。Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。此外,Struts2与Struts1相比,在线程模拟、Servlet依赖、封装请求、类型转换等方面,都有了巨大的改进。

区别 Struts1 Struts2
Action实现 必须统一扩展自Action 可以是一个POJO
线程模型 单实例,一个Action的实例处理所有的请求 一个请求对应一个实例(每次请求时都新new出一个对象)
Servlet依赖 依赖于Servlet API,程序难于测试 不再依赖于Servlet API,有利于测试
封装请求参数 强制使用ActionForm对象封装请求的参数 可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性
表达式语言 整合了EL 整合了OGNL(Object Graph NavigationLanguage)
绑定值到视图技术 使用标准的JSP 使用“ValueStack”技术
类型转换 ActionForm基本使用String类型的属性 使用OGNL进行转换
Action执行控制 支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期 通过拦截器堆栈为每一个Action创建不同的生命周期

                            (选自百度百科) 

二.Spring

  Spring是java平台上的一个开源应用框架,它为应用程序的开发提供了全面的基础设施支持,使得开发者能更好的致力于应用开发而不用关系底层的架构。它的核心功能使用与任何的java应用,用途十分广泛。
  
1、优点
(1)有效地组织中间层对象 。Spring框架能够有效地将现有地框架例如Struts和Hibernate框架组织起来。
(2)实现了真正意义上的面向接口编程,可实现组件之间的高度解耦
(3)所秉承的设计思想就是让使用Spring创建的那些应用都尽可能少地依赖于它的APIs. 在spring应用中的大多数业务对象都不依赖于Spring ,使用Spring构建的应用程序易于进行单元测试 。
(4)提高了代码的可重用性

2、框架特征(选自百度百科):
(1)轻量——(大小与开销)。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布,并且Spring所需的处理开销也很小。
(2)控制反转——通过控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
(3)面向切面——允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
(4)容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
(5)框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
(6)MVC
  所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。  

三.Hibernate

  Hibernate是一个开放源码的对象-关系映射(ORM)框架,是基于JDBC数据持久化的一个框架,它对访问数据库的代码进行了封装,简化了dao层的编码。开发人员可以使用面向对象的编程思想来进行持久层开发,操作数据库,也可以使用Hibernate提供的HQL(Hibernate Query Language)直接从数据库中获得java对象。
  
  (下图为Hibernate工作原理图:)
  【SSH】框架简介
  

小结

  通过ssh网上商城,学到了很多java的思想与内容,这与当初学习.net的感觉大不相同,接下来我们需要学习更多的知识,编织更大的知识网。