SSH框架总结

来源:互联网 发布:大数据魔镜使用方法 编辑:程序博客网 时间:2024/06/08 16:26

        网上商城SSH项目从不知道如何下手,到各个功能的实现经历了相当长的一段时间,和当初敲牛腩新闻发布系统时的感觉差不多。虽然起步挺艰难,过程中也是各种问题层出不穷,但是乐在其中,痛并快乐着。下面总结一下SSH框架:

        【知识点】

        1、概念

        首先我们需要知道,SSH不是一个框架,它是多个框架的集合。SSH 为 Struts+Spring+Hibernate的一个集成框架,也是目前较流行的一种Web应用程序开源框架。SSH框架图如下:

                                      

        从SSH框架图我们可以看出,SSH框架的系统从职责上可以分为四层:实体层、DAO层、服务层、Web层,专业一点来说也就是:域模块层、数据持久层、业务逻辑层、表示层,可以更好的帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。

        具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理Struts和Hibernate。

       2、 基本业务流程

         a、在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts.xml)将ActionServlet接收到的Request委派给相应的Action处理。

         b、在业务逻辑层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。

         c、在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

        举例:Action----->ProductService------>ProductDao

          

        采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。

        3、框架结构

        a、Struts

               是什么:Struts是一个基于javaee平台的MVC框架,他是属于一个表现层的开发框架,框架是一个模板,模板是一个半成品,自己本身是不能正常运行的。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间,混合使用Servlets和JSP的优点来建立可扩展的应用。Struts对Model,View和Controller都提供了对应的组件。

                                

          看上图我们可以知道,Struts的核心构成是Model,View和Controller。ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。

         Mode部分由ActionForm和JavaBean组成,其中ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionForm里面的请求参数处理用户的请求。JavaBean则封装了底层的业务逻辑,包括数据库访问等。

        View部分:该部分采用JSP(或HTML、PHP……)实现,视频中是采用JSP实现的,Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。

        Controller组件:Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器。系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。

        优点:Struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。Struts可以清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序的过程,Struts提供的类使得开发工作更加简单。

        拓展:Struts2

         Struts 2是Struts的下一代产品。是在 Struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。

        b、Spring

              是什么:Spring 也表示是一个开源框架,简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。目的是为了解决企业应用程序开发的复杂性使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。

                                    

         核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接),Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

        优点:轻量、控制反转、面向切面、容器等,Spring也提供了很多基础功能(事务管理、持久化框架集成等等),这些特性使你能够编写更干净、更可管理、并且更易于测试的代码。

        c、Hibernate

              是什么:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

                                

        Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。具体如下:

         Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

         SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

         Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

         Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

         Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。

         执行的基本流程图:

                   

         优点:

                  封装了JDBC,简化了很多重复性代码。

                  简化了DAO层编码工作,使开发更对象化了。

                  移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

                  支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

        【小结】

          SSH项目差不多进行了一个月的时间,和当初学习牛腩时感觉差不多,开始很多东西都不懂怎么弄,前10天差不多都在了解,JDK/MyEclipse/Tomcat/MySQL的使用和环境配置以及SSH(struts+spring+hibernate)整个框架的搭建.开始挺茫然的查了不少资料,后来慢慢找到了感觉,才开始正式实现代码。看视频的过程中遇到了各种问题,看3集退2集,最后功能实现了还是挺高兴的。对邮件验证和在线支付也有了初步的了解,其实没有想象中那么难。现在只是入门学习,还有很多东西需要更深一步的学习。

1 0
原创粉丝点击