SSH思想之我见!

简介:

    最近搞了一下SSH,首先是因为SSH还不熟,只是大一暑假时搭建过一次,后来就一直没有搞,暑假那次还是在视频的指导,

和其他人的指点下完成的。原理和思想也不清楚。毕竟当时J2EE刚入门,再加上我们中心的一贯作风,“不求甚解,实现至尚”的原

则。所以一说起SSH,自己就非常心虚。毕竟自己不懂原理,只会搭个壳,也没搞过项目,没有实践的积累。终于在手头的助学网后台

功能全部over而页面一直没有音讯的情况下,抽出了时间把SSH着实巩固了一番。咳~~~还觉得基础还是不够好。一个框架都搞不透。

经过连续几天断断续续的吐血下,终于算是征服了SSH。

******************************************************************

          切入正题,SSH就是struts1.0与Hibernate由spring解耦合。

          SSH分三层,web层(struts),业务逻辑层,数据库操作层(Hibernate)。SSH是J2EE中应用最为广泛的系统级开发框架。

因为它的易于维护和拓展,使得SSH得到广泛的应用。

          SSH的精髓在于spring的管理。

******************************************************************

          常见的SSH层一般分为7层:

          dao层(数据库接口),daoimpl层(数据库操作实现类),vo层(POJO类,数据库实体类),service层(业务逻辑层接口),

serviceimpl层(业务逻辑实现层),action层(web逻辑处理层),form(表单处理层)。

          struts开发项目由来已久,可以说是实现MVC的最早的完善框架。但是技术一直在发展与进步,以至于现在渐渐的已经被更实用的

框架取代,例如struts2(webwook+struts的结合),JSF......之类,这些框架会更好使,更加合理,开发会更easy。但是如果说发展的

成熟度,其实这些新兴框架,也足够完善。起码struts2已经可以很好的开发。从而也就有了我之前的随笔《struts2+spring+Hibernate搭建全解》

。其实前段用哪个框架也不是固定的。

          Hibernate是数据库持久化的框架,是我们从以往的操作数据库转变为操作对象。更利于面向对象编程。而且也对数据库操作进行了封装。

优化了sql语句,异常抛出,开闭连接等等。可以说是非常完善的底层框架。spring对Hibernate注入的操作和方法。也更加方便了操作。但是我并

不主张,让spring过多的注入Hibernate,因为spring的诞生就是解耦的。使web层,与数据库底层操作分离。这样把业务逻辑分离出来。便于扩展

新功能或删除不用的功能,或着移植代码。是在MVC模式把美工(UI设计)和后台编程分离来后的又一大革新。使程序员面向接口编程。把后台的

开发也完美的分离。对于小型的项目来说也许并不意味着什么。但是对于中大型项目来说,节省了大把的开发成本。

          spring就是SSH的画龙点睛之处。spring的精华在于反射机制。偶不得不赞叹

spring的两个核心AOP(面向切面编程),IOC(依赖注入)十分的帅。这两个思想,体现在spring的XML配置文件之中。 其中的依赖注入

是由Bean实现,从而实现面向切面编程,事务的管理。ACEGI(security)(权限验证框架,有待偶的进一步研究)框架中体现就明显。

******************************************************************

废话也不想多说,直接说SSH思想和特点:

1.除了实例化POJO对象需要new对象以外实现impl不再需要new对象,一切都是getBean读取配置文件spring配置文件。

2. 解耦web层与数据库操作层。

3. 利用反射动态获取所有类信息。

4. 对数据库的操作对象化,除了取出单独字段和查询外,尽量使用数据库实例化对象,尽量不使用HQL语句。

******************************************************************

我在刚开始SSH搭建的过程中总是遇到空指针。这就是由于我的思想还停留在struts+Hibernate层面,没有理解SSH的思想。

这样的话,我的这路实现操作与spring根本不同路,而Hibernate又是通过spring配置的。所以当然数据库操作会报空指针的错。

这个困扰我很久。然后就是什么样的分层才是最帅的最合理的。

最终借鉴网上的一些思想和师兄的开发心得,我终于有了自己的实现分层思路。

******************************************************************

最初是打算一个DAO包括所有数据库操作接口。一共20个接口:这套接口是非常成熟且实用的。包括:

增删改查,动态查询,高级搜索,分页实现,动态分页。 这是传说中的BaseDao(当然你也可以叫别的名)。

然后一个BaseDaoImpl实现类。接着是业务逻辑层,和web层。除了这个基类Dao外不再有其他的数据库操作类。

这样业务逻辑层就变得臃肿。其中既有HQL,又有对象的实例化。但是我的想法是本着分离两层,以后功能扩展修改

直接通过修改业务逻辑层一个层和web层。这样就可以少维护一个层。但是后来师兄的心得使我改变了想法。

******************************************************************

师兄的项目是除了BaseDao接口外又新建了其他的数据库操作接口。然后全部实例化操作。让这些子接口继承BaseDao接口,

,但是这样就和我一开始的想法有点冲突。但是实事证明,这样有好处。就是HQL,对象实例化都在DaoImpl里,业务层专注实现

业务,根本不考虑底层操作。也没有乱七八糟的HQL语句。如果修改业务,那么DaoImpl也不用动。毕竟这些方法也不会占几百MB

代码的项目多大地儿。留着呗,说不好以后有用呢。感觉这个方法就是我假期做东西的思路。

******************************************************************

最终我决定使用一个折中的方案,一个BaseDao,多个DaoImpl实现类。因为Dao子接口基本和service层接口一致,所以如果

再写一遍,总觉得是多余。所以就不写了,这套DaoImpl注入BaseDao的实现类方法,并且自己也继承HibernateDaoSupport,

以方便使用泛型或者更灵活的操作数据库对象。一个BaseAction封装并重用getBean等spring与struts的action整合的类。

一个BaseService接口当然也不是必须的,负责业务实现中的对象创建与获取,一个BaseServiceImpl也不是必须的,实例化BaseService

接口。


本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2008/11/27/1341818.html,如需转载请自行联系原作者

相关文章
|
Linux 虚拟化 Windows
Linux、Windows上还不会端口映射的网工,请低调看过来!
Linux、Windows上还不会端口映射的网工,请低调看过来!
447 0
|
运维 监控 安全
阿里巴巴DevOps实践指南(十九)| 监管控一体化运维
阿里巴巴应用运维监管控一体化的建设随着业务形态和技术架构还在不断地探索和发展,本文主要介绍了应用运维监管控一体化建设的背景和思路。我们以应用为中心,从应用监控管角度出发,通过全视角监控实时掌握应用的运行状态,通过高效发布部署和灵活的运维编排对应用进行安全变更,通过智能化运维和安全防护实现应用的高级防护。
阿里巴巴DevOps实践指南(十九)| 监管控一体化运维
|
6月前
|
存储 数据挖掘 调度
像架构拼乐高一样构建采集系统
本教程教你如何构建一个模块化、可扩展的某博热搜采集系统,涵盖代理配置、多线程加速与数据提取,助你高效掌握网络舆情分析技巧。
161 0
像架构拼乐高一样构建采集系统
|
10月前
|
缓存 编解码 监控
开发体育直播系统:用户管理机制与内容审核技术实现方案
本体育赛事直播系统基于ThinkPHP框架构建管理端,实现内容审核、用户管理和权限配置等功能。系统通过角色与权限设计(如普通用户、主播、专家等),结合JWT认证和多端统一登录方案,确保安全性和灵活性。内容管理方面,采用敏感词过滤、自动化审核及阿里云内容安全服务,保障直播质量。性能优化涵盖推流鉴权、H.265编码和缓存策略,提升用户体验。此外,系统还提供实时监控看板与用户行为分析,支持粘性分析和智能推荐,全方位满足体育直播需求。
|
10月前
|
监控 安全 数据安全/隐私保护
销售易CRM:技术架构与安全性能的深度解析
销售易CRM基于云计算与微服务架构,融合高可用性、弹性扩展及模块化开发优势,为企业提供灵活定制化的客户关系管理解决方案。系统采用多层次安全防护机制,包括数据加密、细粒度权限控制和实时监控审计,确保数据安全与隐私保护。某金融机构的成功案例表明,销售易CRM显著提升了数据安全性和系统性能,同时满足行业合规要求。作为数字化转型的利器,销售易CRM助力企业实现可持续发展与市场竞争力提升。
|
人工智能 程序员 测试技术
亲测可用,IDEA 中使用满血版 DeepSeek R1!支持深度思考!免费!免配置!
之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。那么,今天,给大家带来一个亲测有效,可使用DeepSeek R1,同时支持问答+AI程序员,无需配置,快速使用的方案。那就是借助阿里的通义灵码,通义灵码最近刚刚做了重大更新,新上线了模型选择功能。在支持Qwen的模型之外,还同时支持了DeepSeek-V3 和 DeepSeek-R1 ,而且是满血版671B模型。
|
消息中间件 监控 网络协议
什么是中间件?
一、为什么要中间件 计 算机技术迅速发展。从硬件技术看,CPU速度越来越高,处理能力越来越强;从软件技术看,应用程序的规模不断扩大,特别是Internet及WWW的出 现,使计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。
2004 78
|
存储 人工智能 关系型数据库
2024年阿里云开年上云采购季活动主会场内容及各分会场入口汇总
阿里云2024年的开年活动“上云采购季活动”已于3月1日正式上线,活动的所有内容及分会场入口也公布了出来,主会场有99计划、企业上云必备、精选云产品、办公必选推荐、企业百万礼包、行业热门场景、百款产品直降等活动内容,同时还有云服务器会场、数据库会场、云存储会场等9大分会场,下面是2024年阿里云上云采购季活动主会场内容及所有分会场入口。
2024年阿里云开年上云采购季活动主会场内容及各分会场入口汇总
|
Shell Android开发 Python
Flutter如何正确使用图片资源
Flutter如何正确使用图片资源
267 0
|
Java
Java IO流终极指南:从InputStream/OutputStream到Reader/Writer的全面解读
【6月更文挑战第26天】Java IO流涵盖字节流(InputStream/OutputStream)和字符流(Reader/Writer),前者处理二进制数据,后者专司文本。例如,FileInputStream/FileOutputStream用于文件的字节级读写,而FileReader/FileWriter处理字符级文本。Buffered流提供缓冲功能,提升效率。选择合适的流类取决于数据类型和性能需求。
321 0

热门文章

最新文章