WWW-SSH

WWW-SSH

对于我这个学习者而言, 在刚开始学JavaWeb时就经常看到SSH这3个字母,抱着无比的好奇心,我对他们做了大致的了解。
下面来总结一下, 以祭奠我为他们所花费的时光。

项目中为什么使用SSH

  1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;struts有着丰富的标签库,能大大提高开发效率。
  2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架(ORM)。hibernate是个轻量级的持久性框架,功能丰富。
  3. 使用Spring:因为spring基于IOC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架。

在项目中3者的用处:

1)在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(*-struts.xml)
将ActionServlet接收到的Request委派给相应的Action处理。
2)在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,
并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
3)在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

Struts工作原理

这里写图片描述
根据上图:

1)客户端发出一个指向servlet容器的请求;
2)请求会经过StrutsPrepareAndExecuteFilter过滤器;
3)过滤器和请求将访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。
如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一些基本信息,ActionMapper
存有action的配置信息。在请求过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。
过滤器会通过询问ActionMapper类来查找请求中需要用到的Action。
4)如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象。ActionProxy通过ConfigurationManager询问
框架的配置文件,找到需要调用的Action类。
5)ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了Action的执行状态,或者说它控制的Action的执行步骤。
它持有Action实例和所有的Interceptor。
6)ActionInvocation实例使用命名模式来调用,
1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke方法调用Action实现时,执行 Interceptor。在调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。
7) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

———————————通俗地说:
1)发送http请求
2)Web服务器(tomcat/weblogic…)
3)执行struts核心过滤器StrutsPrepareAndExecuteFilter
4)加载struts配置文件中配置信息,找到对应的Action类并实例化
5)执行各类拦截器和Action中对应方法
6)配置文件中找到返回结果
7)转发到具体页面或其它操作

可以查看 自实现MyStruts框架这篇博文

Struts有什么优缺点

优点:
1. 实现MVC模式,结构清晰;
2. 丰富的struts的标记库,利用好能大大提高开发效率;
3. 全局结果与声明式异常;
4. 可使用OGNL进行参数传递
5. 各个类方便使用的拦截器

缺点:
1. 转到表现层时,需要配置结果页面;页面多了比较繁杂;(真的烦)
2. 对Servlet的依赖性过强 ?
3. struts标签稍微比el表达式繁重

Spring

为何使用Spring

Spring是一个轻量级的控制反转(IoC)、面向切面(AOP)、面向接口、事务管理、包容促进其它框架;
使系统中用到的其它框架耦合程度大大降低,拓展性强、简单易用好管理。

spring在项目中充当粘合剂

1)在项目中利用spring的IOC(控制反转或依赖注入),明确地定义组件接口(如UserDAO),开发者可以独立开发各个组件,
然后根据组件间的依赖关系组装(UserAction依赖于UserService,UserService依赖于UserDAO)运行,很好的把Struts(Action)和hibernate(DAO的实现)结合起来;
2)spring的事务管理把hibernate对数据库的操作进行了事务配置

Hibernate

Hibernate工作原理

1)读取并解析配置文件
2)读取并解析映射信息,创建SessionFactory
3)打开Session、创建事务Transation
4)持久化操作
5)提交事务、关闭Session
9)关闭SesstionFactory

为什么要用 Hibernate###

1) 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2) Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3) hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4) hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

Hibernate的缺点 ###

1)由于对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL,
Hibernate封装了JDBC,所以没有JDBC直接访问数据库效率高。要使用数据库的特定优化机制的时候,不适合用Hibernate
2)框架中使用ORM原则,导致配置过于复杂,一旦遇到大型项目,比如300张表以上,配置文件和内容是非常庞大的,另外,DTO满天飞,性能和维护问题随之而来
3)如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。
4)Hibernate在批量数据处理时有弱势,对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值