Spring+ Structs2+Hibernate(SSH)框架总结概述

背景知识:

我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。

一、SSH三大框架

    structs2
    spring
    Hibernate

二、structs2

1.structs2原理

1.1 structs2原理图

第一步:客户端初始化一个指向Servlet容器(例如Tomcat)的请求
第二步:这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
第三步:接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
第四步:如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
第五步:ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
第六步:ActionProxy创建一个ActionInvocation的实例。
第七步:ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

第八步:一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

注意:在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的

1.2 structs2的优缺点:

优点:

大量的拦截器:
Struts2本身提供了大量的可重用的拦截器,比如类型转换拦截器,很多时候我们从页面取得参数,这个时候它是String类型的,我们需要手动。
基于插件的框架:
Struts2是一个基于插件的框架,社区中提供了很多实用的插件,比如jfreechat/json等等,使用这些插件可以简化我们的开发,加快开发进度。
struts2最大的缺点莫过于在好多web服务器上支持不好,例如在websphere5.5,weblogic8.1及以前版本支持非常查,需要用最新的。
多种视图的支持:
多种视图的支持:jsp,freemarker,Veloctiy,只要你愿意,你甚至可以通过轻松的改造让它支持pdf,同一个项目中你可以支持多种视图。
更加的模块化:
与Struts1.X 相比,Struts2更加的模块化,可以轻松将配置信息按功能界限拆分成多个文件,便于管理和团队协作开发。
与Spring的集成:
与Struts1.x相比,Struts2不必再自己编写singleton,进一步的降低了程序间的耦合性,就Struts2内部本身而言,降低了框架本身的偶合性。
基于pojo易于测试:

在Struts1.x中我需要Mock出这两个Http对象,使我们很难编写Action的单元测试,与Struts1.x相比,Struts2的Action 不再依赖于HttpServletRequest和HttpServletResponse对象,使我们能够更方便的针对Action编写单元测试。

缺点:

Struts2中Action中取得从jsp中传过来的参数时还是有点麻烦。

可以为Struts2的Action中的属性配置上Getter和Setter方法,通过默认拦截器,就可以将请求参数设置到这些属性中。如果用这种方式,当请求参数很多时,Action类就会被这些表单属性弄的很臃肿,让人感觉会很乱。还有Action中的属性不但可以用来获得请求参数还可以输出到Jsp中,这样就会更乱。假设从JSP1中获得了参数money=100000,但是这个Action还要输出到JSP2中,但是输出的格式却不同,money=100,000,这样这个Action中的money中的值就变了。

校验还是感觉比较繁琐,感觉太烦乱,也太细化了。

如果校验出错的只能给用户提示一些信息。如果有多个字段,每个字段出错时返回到不同的画面,这个功能在Strut2框架下借助框架提供的校验逻辑就不容易实现。

安全性有待提高。

Struts2曝出2个高危安全漏洞,一个是使用缩写的导航参数前缀时的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞。这些漏洞可使黑客取得网站服务器的“最高权限”,从而使企业服务器变成黑客手中的“肉鸡”。

二、spring

1.spring简介

spring 是一个轻量级的,基于IOC和AOP核心技术的企业级开源开发框架

动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,根据xml Spring的配置文件来动态的创建对象,和调用对象里的方法的。

Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。

Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象)

注意:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

2.spring的主要特征

(1)轻量级:spring是一个轻量级的开发框架,基本版本大约只有2M

(2)IOC:控制反转,应用程序中对象之间的依赖是由spring 来控制的

(3)AOP:面向切面编程,spring支持面向切面编程,这样可以将业务逻辑和系统服务分开,分离

(4)容器:包含并管理应用程序中对象的生命周期和配置信息

(5)MVC思想:spring也是基于MVC思想的框架,也遵循模型-视图-控制器这三个层次

(6)事务:spring提供一个持续化的接口,可以上至扩展到本地事务下至扩展到全局事务

(7)异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,hibernate,or JDO抛出的)转化为一致的unchecked 异常。

 3.spring优缺点

优点:

    Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。
    Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
    通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属
    性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。
    通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。
    Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。
    使用Spring构建的应用程序易于单元测试。
    Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。
    Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。
    Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。

缺点:

1.jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

2.Spring不支持分布式,这也是EJB仍然在用的原因之一。

三、hibernate框架

1.hibernate的工作原理

第一步:Configuration.config() 来读取xml配置文件

第二步:Configuration.config()来读取配置文件里面的映射信息

第三步:创建会话工厂

第四步:打开会话

第五步:开启事务

第六步:持久化到数据库

第七步:关闭会话
第八步:关闭会话工厂

2.hibernate优缺点

优点:

1.hibernate是基于ORMapping技术的开源的框架,对JDBC进行了轻量级的封装,使用面向对象的思维来操纵数据库。

2.hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。

3.低侵入式设计

缺点:

1.hibernate不容易上手,学习成本太高

2.hibernate由于不直接对底层数据库进行操作,所以不适合复杂的查询(统计)

3.不适合大量的聚集操作(存储过程)
 

详情请看大佬博客https://blog.csdn.net/qq_28143647/article/details/79459004

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值