摘 要: 分析了三种基于MVC分层设计思路的Java Web框架开发经典模型优缺点及适应性,并给出各模型实现过程的要点及关键步骤。通过分析可知,模型在开发中实现了MVC设计模式的低耦合、易维护和可扩展的分层思想,使用者在实际应用中灵活选择合适的开发模型可极大提高开发效率,降低开发和维护成本。
关键词 : Java Web框架开发; MVC分层; JSP/Servlet; SSH; SSM;
当前,信息技术是推动经济活动的重要引擎,作为信息技术的核心,软件应用程序开发的重要性不言而喻。Java Web是软件开发的主要模式之一,Java Web采用流行的J2EE架构,即采用基于MVC (Model,View,Controller)的分层设计思想,对数据持久层(Model层,即对数据库的存取)、业务逻辑控制层(Controller层,即业务逻辑请求)及视图层(View层,即用户显示)实行分开处理模式[1]。随着开发技术发展及软件应用业务需求复杂性的提升,Java Web后台框架技术也随之快速发展,流行的Java Web框架较多,繁杂的框架及多种与框架相关的新理念令开发学习者无所适从。此外,中大型的项目开始采用分布式技术、微服务技术等,对开发者的要求更高,越是如此,越要学习底层的基本原理[2]。鉴于此,作者选择Java Web框架中几种典型的Java Web框架开发模型加以介绍,有以下几种:(1) EJB;(2)JSP/Servlet;(3) SSH(Struts+Spring+Hibernate);(4)SSM(Spring+SpringMVC+Mybatis);(5)SpringBoot。EJB因其复杂性被其他模型替代;SpringBoot及后续的框架目前是较多软件开发人员学习者首选的框架开发模式,为软件开发带来便捷性的同时并大大缩短了软件开发周期,但它是由SSM框架发展而来,故开发者需要重点掌握SSM框架模型运行机制。鉴于以上原因,本文重点讨论JSP/Servlet、SSH、SSM三种框架模型,通过此三种模型基于MVC分层设计思路及实现过程的对比,给出各种模型的优缺点及其适应性,并分析各模型在分层实现过程中需要注意的要点及关键步骤,为开发人员学习提供借鉴思路。
1、 JSP/Servlet、SSH、SSM三种模型技术特点及适应性
JSP/Servlet是Java Web早期的开发模型,就个人观点,同SSH、SSM框架比较,JSP/Servlet算不上真正的框架模型,因为使用该模型所涉及的MVC分层业务及逻辑编码工作均由用户完成,而使用SSH、SSM框架,相应环节中开发人员只需清晰系统参数配置流程并按模型要求正确配置模型所需的参数,系统便可自动帮助开发人员完成数据持久层(Model层,对数据库的操作)的封装,并按需求完成与业务逻辑控制层(Controller层)的无缝对接,即将数据层注入至业务逻辑控制层,让模型自动完成复杂数据存取及业务管理工作,无需编写大量代码。后阶段开发者则可将重心放至业务逻辑控制层(Controller层)与视图层(View层)相关工作,即完成数据提取及页面展示的工作,从而大大缩短开发流程及时间。需要强调是,SSH、SSM模型功能较JSP/Servlet模型要强大,但透彻理解JSP/Servlet模型中的Servlet运行机制并灵活运用是学习SSH、SSM模型的基础;此外,选择SSH、SSM这两种组合方式的模型使项目的开发具有高度的可维护性和可扩展性,同时可极大提高开发效率,降低开发和维护成本;SSH、SSM模型均以Spring框架为核心,两者的主要不同之处在于MVC的实现方式(Struts与SpringMVC)及ORM持久化方面(Hibernate与Mybatis):SSH注重配置开发,其中的Hibernate对JDBC的完整封装更加面向对象化,对增、删、改、查的数据维护更自动化,但SQL优化方面较弱,对学习者要求高;SSM更注重注解式开发,且ORM实现更加灵活,SQL优化更简便,入门容易。故当前传统企业项目的开发,使用SSH框架比较多,而对性能要求较高的互联网项目,通常会选用SSM框架[3]。
下表1给出了三种模型特点的对照表,通过表格对比可知,开发人员若掌握了以上三种模型并熟练运用,对于其他模型的学习或应用也能起到触类旁通之效。在实际应用中可灵活选择合适的开发模型。
表1 JSP/Servlet、SSH、SSM三种模型适用性对照表
2 、JSP/Servlet、SSH、SSM三种模型实现的要点及关键步骤
基于MVC分层模型中的示图层是与用户交互的界面,主要为其他层(数据持久层或者业务逻辑控制层)传递数据(根据业务的不同,可分为传入数据或读取数据两种方式),用前台相关工具如Bootstrap、JQuery作JSP页面展示交互处理,与模型的选择具有无关性。另外,使用经典框架与微应用中跨平台数据的转换(如将后端数据换转成JSON)等问题学习者可查阅相关资料。此处重点讨论数据持久层、业务逻辑控制层、视图层各层的核心内容,并分析各模型在分层实现过程中需要注意的要点及关键步骤。最后根据各模型思路分别实现了对数据库中表Student访问的功能(各模型分析时以图或代码予以展示)。
2.1、 JSP/Servlet模型实现的要点及关键步骤
JSP/Servlet是早期Java Web开发框架模型。该模型因简单实用并按MVC三层开发思想实现了相应层的业务,适合初学者。因此,替代繁琐而笨重的EJB并迅速成为开发模型利器。该模型中,数据持久层利用JDBC实现对数据库表操作,由于频繁访问数据库,实际开发中通常将这些操作封装到类中(不同的表,创建独立的DAO类,如图1),每一个操作对应一个独立方法,当需要使用该操作时,调用相应的方法来完成;业务逻辑控制层主要由Servlet来完成,在Servlet中完成参数的接收,然后使用参数调用业务逻辑层,根据调用结果的不同跳转到不同的页面,需注意的是,由于安全运行机制需要,每创建一个Servlet业务请求类,必须在web.xml中注册,而生成的Servlet类文件,虽然是由java代码编写,但必须发布至后台tomcat下通过浏览器访问才能正常运行(图2—图3),由于Servlet处理逻辑层业务优秀特色,部分功能被SSH、SSM框架借鉴;JSP程序主要是做显示层,从页面发送请求至业务逻辑控制层,逻辑层作出响应,并将处理后的结果(数据)回送至JSP页面进行展示(图4)。
图1 利用JDBC实现的StudentDAO类
图2 Servlet类的创建
虽然JSP/Servlet模型具有简单易学特点,由于需要开发者手动编写所有代码以实现相应的功能,对于功能复杂的系统采用该模型则需更长的开发周期。故被更为优秀模型如SSH所取代。
2.2 、SSH模型实现的要点及关键步骤
SSH框架也是流行的Java Web开发框架模型,是JSP/Servlet升级模型。该模型侧重于配置开发,以Spring框架作为核心,Spring充当粘合剂的角色,在持久数据层与业务层之间通过配置界面方式(以Myeclipse作为开发工具)完成相关参数的设置步骤(图5—图6),通过Hibernate框架逆向工程方式自动生成以数据表为操作对象DAO及相关类(图7—图9),免除了大量代码的编写,生成的持久层相关数据通过注入Spring与进行整合,从而实现Spring与模型层的对接(图10)。需要注意的是,Hibernate框架逆向工程生成的DAO类不能实现事务管理,对接后由Spring框架实现对数据库的事务管理机制,事务管理分编程式和声明式两种,如果在DAO程序中有严格的方法命名规则,在Spring框架配置文件中需予以声明,否则只需遵循开发规则命名即可;在业务层与视图层之间,Spring和Struts整合主要的目的就是让Spring管理Struts中的Action(与Servlet功能类似),并将业务逻辑注入到Action中,可参考相关资料按照Struts框架的整合步骤即可完成参数配置,但需重点关注业务逻辑层注入到Aciton中配置步骤,可采用通用Setter方法注入的方式完成(图11—图13)。通过对应层间的整合,最终SSH实现基于MVC相关层的完美整合。
图3 Servlet类的注册
图4 由业务层提取结果至视图层JSP页面展示
图5 数据库配置
图6 操作对象
图7 设置生成DAO及相关类
图8 逆向工程生成相关类
图9 逆向工程DAO类
图1 0 Hibernate与Spring对接
SSH框架是Java Web应用开发中被选用较多的框架,曾一度成为事实上应用开发的首选,直至由于未更新Struts的安全漏洞而被SSM所替代。
2.3、 SSM模型实现的要点及关键步骤
如前面所述,SSM框架是当前最流行的Java Web框架模型,它充分吸收了SSH的优势,比如继续保留了Spring框架作为核心。该模型中Spring层实现业务对象的管理,示图层使用Spring MVC负责请求转发和视图管理,模型层则以Mybatis实现数据对象的持久化引擎管理。用SpringMVC替代有安全漏洞的Struts;以Mybatis替代Hibernate;与JSP/Servlet模型、SSH模型操作数据库必须花费精力编写JDBC繁杂操作数据的过程代码不同,Mybatis则通过xml或注解的方式将JDBC操作数据库的过程进行封装,开发者只需重点关注SQL本身,最后由Mybatis框架执行sql并将结果映射成Java对象并返回(如图14)。此外,对数据库中所有需要操作的每一张表都变成以表名+Mapper.xml的文件,xml文件中以表的命名空间包括对该表操作的sql语句,建议开发者采用Mybatis逆向工程方式生成表名+Mapper.xml(如图15),表名+Mapper.xml相当于JSP/Servlet模型、SSH模型中的DAO类文件(数据表操作对象,包含该表的增删改查的操作),采用xml标签与sql结合方式,解除了sql和程序代码的耦合,适合中大型项目开发,不需编写过多的Java代码,省却了编译过程,便于统一管理和优化。实现数据对象持久化的Mybatis以注入方式完成与Spring框架的整合参数配置及实现(图16—图18),由Spring框架实现对数据库的注解事务管理机制,开启对Mapper代理开发及自动扫包模式。从而实现Spring框架与Mybatis的优化整合,开发人员后期通过进一步完善,为SpringMVC层提供数据服务。
图1 1 Struts与Spring对接配置
图1 2 DAO以Setter的方式注入Spring
图1 3 Action实现代码
图1 4 Mybatis框架执行流程图
图1 5 逆向工程生成的StudentMapper.xml
图1 6 Spring框架配置文件1
图1 7 Spring框架配置文件2
图1 8 Spring与Mybatis整合注解测试
对以上三种基于MVC分层设计思路模型的实现过程的要点及关键步骤加以分析可知,SSH、SSM这两种组合方式的模型在项目的开发中都实现了MVC设计模式的低耦合、易维护和可扩展的分层思想,可极大提高开发效率,降低开发和维护成本,需透彻理解模型才能事半功倍;JSP/Servlet模型则简单易学,适合初学者。掌握了以上三种基本模型,开发人员在学习或者应用中可根据实际需要灵活选择合适的开发模型。
3 、结语
本文分析了三种基于MVC分层设计思路的Java Web框架开发经典模型优缺点及适应性,并给出各模型实现过程的要点及关键步骤。通过分析可知,JSP/Servlet模型简单容易学习,但采用该模型后开发者后续工作量较大;SSH、SSM这两种模型需要开发者有较好的基础知识,正确配置相关参数,可为开发带来较多的便捷性,并在项目的开发中实现了MVC设计模式的低耦合、易维护和可扩展的分层思想,可极大提高开发效率,降低开发和维护成本。总之,掌握了以上三种经典开发模型并熟练运用,对于其他模型的学习或应用也能起到触类旁通之效。
参考文献
[1]张烈超,胡迎九.融合Hybird Web APP应用的云应用开发模型的设计与实现[J] .武汉交通职业学院学报, 2019,21(1):92-97.
[2]彭之军,刘波. Java EE SpringMVC与MyBatis企业开发实战[M] .北京: 电工业出版社, 2019:前言.
[3]马程序员. Java EE企业级应用开发教程( Spring+Spring MVC+Mybatis ) [M] .北京:人民邮电出版社, 2017 :前言.