近期在学习企业开发领域非常流行的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配置繁复的原因。在实际项目如何取舍我想每一个人心中都有一杆秤。

(完)

关于SSH框架设计的一些理解的更多相关文章

  1. 说说你对用SSH框架进行开发的理解

    SSH框架指的是Struts,Spring,Hibernate.其中,Struts主要用于流程控制:Spring的控制反转能祈祷解耦合的作用:Hibernate主要用于数据持久化.

  2. SSH框架搭建和整合(struts2、spring4、hibernate5)

    声明: 本博文是个人通过对ssh框架的学习.理解还有一些看法而描述出来的,可能有不足之处,请大家谅解,但希望能帮助到大家! 目的: 使初学者能更好的去了解SSH框架. 给以后的自己,也给别人一个参考. ...

  3. 【SSH 1】SSH框架的基本理解

    导读:在结束了BS之后,接触到的第一个项目算是网上商城了.这次用到了和之前都不一样的框架:SSH.这个项目就和之前学牛腩一样,有着里程碑的意义.当然了,这也就意味着,什么都是新鲜的,接触到的东西,有时 ...

  4. 基于SSH框架的考勤管理系统的设计与实现

    基于SSH框架的考勤管理系统的设计与实现

  5. Java SSH框架系列:用户登录模块的设计与实现思路

    1.简介用户登录模块,指的是根据用户输入的用户名和密码,对用户的身份进行验证等.如果用户没有登录,用户就无法访问其他的一些jsp页面,甚至是action都不能访问.二.简单设计及实现本程序是基于Jav ...

  6. 基于ssh框架开发的购物系统的质量属性

    根据前面的博客,我们已经大致了解了ssh架构开发整体概念:Struts是一个实现了MVC模式的经典的框架:Hibernate是轻量级Java EE应用的持久层解决方案,以面向对象的方式提供了持久化类到 ...

  7. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》

    这篇文章比较易懂,易理解: 首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层W ...

  8. SSH框架总结(框架分析+环境搭建+实例源码下载)

    来源于: http://blog.csdn.net/shan9liang/article/details/8803989 首先,SSH不是一个框架,而是多个框架(struts+spring+hiber ...

  9. [Java] SSH框架笔记_框架分析+环境搭建+实例源码下载

    首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

随机推荐

  1. Hibernate之工具类HibernateUtil

    原创文章,转载请注明:Hibernate之工具类HibernateUtil  By Lucio.Yang 1.最简单的工具类,实现SessionFactory的单例共享,session的管理 pack ...

  2. MongoDB学习笔记1(简介)

    一.简介                 1.丰富的数据类型         MongoDB是一种非关系型数据库,是面向文档的数据库.         MongoDB没有模式,文档的键不会事先定义,也 ...

  3. Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connectio (andriod sdk manager) http://dl-ssl.google.com/android上不去解决方案

    Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml  Fetched Add-ons List succes ...

  4. python成长之路10

    断点续传   python2.7 多继承  py35多继承   socketserver源码     支持并发处理socket   i/o多路复用   上节回顾     socket          ...

  5. [LeetCode]题解(python):044-Wildcard Matching

    题目来源: https://leetcode.com/problems/wildcard-matching/ 题意分析: 定义两个新字符规则,'?'代表任意一个字符,’*‘代表任意长度的任意字符.输入 ...

  6. 转: 如何实现jQuery的Ajax文件上传

    [PHP文件上传] 在开始之前,我觉得是有必要把通WEB上传文件的原理简单说一下的.实际上,在这里不管是PHP,JSP,还是ASP处理上传的文件,其实都是WEB早已把文件上传到服务器了,我们只是运用上 ...

  7. Linux部署ASP.NET 5 (vNext)

    原文:Linux部署ASP.NET 5 (vNext) ASP.NET 5 (vNext) Linux部署   引言 工欲善其事,必先利其器. 首先,我们先明确下以下基本概念 Linux相关 Ubun ...

  8. 啊上班的二号i将诶

    http://www.huihui.cn/share/8112372 http://www.huihui.cn/share/8112363 http://www.huihui.cn/share/811 ...

  9. poj 3176 Cow Bowling(区间dp)

    题目链接:http://poj.org/problem?id=3176 思路分析:基本的DP题目:将每个节点视为一个状态,记为B[i][j], 状态转移方程为 B[i][j] = A[i][j] + ...

  10. Poj 2499 Binary Tree(贪心)

    题目链接:http://poj.org/problem?id=2499 思路分析:结点向左边移动时结点(a, b)变为( a+b, b),向右边移动时( a, b )变为( a, a + b); 为求 ...