zoukankan      html  css  js  c++  java
  • 关于SSH框架设计的一些理解

    近期在学习企业开发领域非常流行的SSH框架(Struts、Hibernate、Spring)。因为之前有做过原生的Servlet+JSP的项目,所以在学习过程中我会跟原生开发模式进行对照,在这里我把自己的一些理解做下小结。

    1、Servlet+JSP原生开发

    先简要说一下Java Web原生开发模式,Java Web开发一般是使用Tomcat之类的容器,Tomcat容器实现了一套也能够称为框架的东西,就是Servlet。Tomcat执行于Apache之类的Webserver上。Apacheserver负责处理用户请求的HTTP协议本身的部分。

    当用户请求的HTTP协议部分被Apacheserver处理之后,内容部分就要由Tomcat来处理了。Tomcat归纳了Web请求的共同特性,封装了一个叫Servlet的东西,开发人员基于Servlet,就仅仅须要编写处理Web请求的详细逻辑部分了,至于HTTP请求字段的解析,响应字段的封装都交给Servlet了。

    另外对于Web页面的拼接生成。是使用JSP脚本,Tomcat容器内置有解析器。能够把JSP文件解析成Servlet来执行。

    JSP除了包括HTML/CSS/JS内容以外,有一些JSP的标签语法,用于Servlet向JSP传递一些对象。这样就能够把Servlet处理的结果动态的在JSP页面中显示出来,从而实现动态页面的效果。

    2、Struts框架

    我们来看下原生开发的的一些不足,这样才干较好的理解为什么会有Struts框架。事实上从功能实现角度来说,一般的Web开发用Servlet基本是可以满足的,可是当项目规模比較大的时候,就会显得比較凌乱,由于会定义大量的Servlet。各个Servlet的处理流程会有一些同样的部分,每一个Servlet都须要去反复实现。针对这个问题,SSH框架中的Struts基于软件分层的思想,把Web处理流程中各个部分独立开来,而且把Servlet同样的处理逻辑放到框架来实现,从而把开发者从反复中释放出来。聚焦于详细业务功能实现。Struts採用称为MVC的设计模式,把Web应用分为数据库訪问(M)、业务逻辑(C)、JSP页面(C)三个部分。

    可以通过XML配置文件的方式,把不同的Action訪问引导到相应的Action类进行处理,而且依据Action类处理的结果,在XML中配置不同的结果调用不同的JSP页面资源。

    Struts还把Web开发中一些经常使用通用的工作整合进了框架内:

    1)国际化资源文件,假设用原生开发模式。JSP中的字符串多语言须要自己实现,在各个JSP文件里引入各自语言的JSP字符串定义文件,假设使用Struts就能够由框架来实现。并通过XML配置。

    2)JSP标签。针对原生JSP的不足。Struts定义了一些标签,增强了JSP的表达能力。

    3)输入类型转换,这个工作假设是原生开发通常也是由开发者自己实现的。使用Struts就能够由框架来帮助完毕请求參数到内建对象成员之间相互转换。

    4)输入校验。这个工作假设是原生开发通常也是由开发者自己实现的。使用Struts就能够通过XML定义的方式,由框架来帮助实现。

    5)拦截器。因为假设使用Struts,那么Struts就接管了处理Web请求的整个过程,用户没法自由的在处理过程中插入一些必要的逻辑代码。

    所以框架提供了拦截器这种机制。可以让开发人员在Web请求处理过程中插入一些须要的处理逻辑。通过在XML定义拦截器的方式来提供。

    从上面分析能够看出。相比于原生开发,从功能角度Struts并没有增强多少。Struts基本的工作就是帮助我们把Web应用进行比較好的分层,同一时候把一些反复的工作集成到框架来完毕。这就是框架的作用。

    3、Hibernate框架

    不论採用原生开发模式还是Struts框架,我们都须要自己实现Web应用的详细逻辑部分,这当中包含对数据库的訪问。对于Web应用来说,数据库訪问所占的比重是比較多的,特别是近年来流行的比方ArgularJS之类的前端框架,都有把原本在后端实现的业务逻辑放到前端来实现。假设这样,后端的工作就主要仅仅剩下数据库訪问和安全相关功能了。假设我们採用原生开发模式,我们须要自己实现对数据库的CRUD訪问,通常要编写SQL语句直接訪问数据库。然后解析SQL訪问的结果,并封装到Java对象中提供给上层使用。假设后期切换不同数据库。我们就须要又一次编写SQL处理代码并适配。

    Hibernate框架帮我们封装了对数据库的訪问,为我们提供了第二种选择。

    它通过XML配置的方式。完毕数据库连接。把数据库表映射到Java对象。而且可以把表之间的关联关系也通过XML配置映射到Java对象中。这样开发者訪问数据库时就仅仅须要面对Java对象进行操作,而不用自己去实现原生开发的那些工作了,这样就能从详细的数据库操作中解放出来。后期假设切换数据库通常仅仅用改动XML配置就行了。这样的方式的不足就是添加的了XML的配置。

    4、Spring框架

    Spring框架实现主要包括两个核心机制,一个是IOC(依赖注入)。还有一个是AOP(切面注入)。我如今分别来分析。

    IOC解决的是对象之间的依赖问题,Java是面向对象语言,Web应用会定义大量的对象。对象之间也有相互关联。在通常的开发模式下。我们须要编程来创建各种Java对象,而且把它们互相关联起来,这样做的缺点是对象之间的耦合比較多,兴许维护变更时会须要改动代码。IOC提供了第二种做法。就是对象和对象之间关系通过XML方式定义,然后Spring框架通过Java反射机制帮我们创建这些对象,并依照定义把对象相互关联起来,之后就能够提供给业务逻辑使用了。有人会想,自己创建对象和框架创建对象哪种好,这可能各人有各人的看法,对于大型project来说,Spring关联对象创建和关联可能更清晰,但由此带来的代价就是XML配置的膨胀。所以实际中通常对于大的组件级的对象能够採用IOC注入,对于细小的对象还是自己创建管理。这样能够取得两者之间的平衡。

    AOP是一个重要思想在Spring框架中的详细实现,就是面向切面编程。这个思想简单的说,就是对已有程序的某个接口插入一些另外处理逻辑,这是如何做到的呢?这依赖于IOC机制,因为使用IOC,对象由框架创建,当AOP在XML中定义了切入点和切面函数后,再定义这些切入点指向的IOC对象,之后框架在创建这些IOC对象时,就会通过Java的动态代理机制,对这些IOC对象生成对应的动态代理,并在定义的切入点把切面函数集成进去。当用户程序调用这些代理对象切入点的函数时。也会自己主动调用切面函数,这样就实现了把切面函数的注入。通过这样的机制就行把独立切面函数任意注入须要切入的IOC对象中去,在实际中的一个典型应用就是为对象添加事务机制,可以把事务处理独立的注入须要事务的对象里,这样事务处理就不用与须要事务的对象紧密耦合。除了事务,在Web系统中一些具有横切性质的服务通常也会使用AOP来实现,比方安全检查、缓存、对象池管理等。

    5、总结

    从上面的分析能够看出来,Servlet帮我们封装了Web请求和响应的通用处理逻辑,而SSH又在Servlet的基础上又帮我们封装了一些Web应用系统的通用处理逻辑。软件就是这样一层一层的叠加而成,遇到通用的地方就进行抽象封装。当然封装的代价是添加了很多XML配置,这也是很多人诟病SSH配置繁复的原因。在实际项目如何取舍我想每一个人心中都有一杆秤。

    (完)

  • 相关阅读:
    ubuntu 制做samba
    《Programming WPF》翻译 第4章 前言
    《Programming WPF》翻译 第4章 3.绑定到数据列表
    《Programming WPF》翻译 第4章 4.数据源
    《Programming WPF》翻译 第5章 6.触发器
    《Programming WPF》翻译 第4章 2.数据绑定
    《Programming WPF》翻译 第4章 1.不使用数据绑定
    《Programming WPF》翻译 第5章 7.控件模板
    《Programming WPF》翻译 第5章 8.我们进行到哪里了?
    《Programming WPF》翻译 第5章 5.数据模板和样式
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5096897.html
Copyright © 2011-2022 走看看