当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:J2EE是目前企业开发的主流Java开发应用平台,文章主要介绍了轻量级J2EE中流行的Struts2、Spring和Hibernate三种框架。具体阐述了SSH框架的基本特征、优点以及SSH的无缝集成,并结合病房信息管理系统项目的实例,分析了SSH框架的设计和实现方法。

引言

时至今日,信息技术和网络技术发展迅速,轻量级J2EE平台在企业开发中占有绝对的优势,越来越多的企业使用基于J2EE的开发平台进行Web应用开发。传统的J2EE框架具有对服务器要求高、耦合度高等缺点,这样就限制了Web系统的开发效率。轻量级J2EE框架不但保留了传统的J2EE框架良好的可扩展性、可维护性、安全性等特点,并且还具有开发灵活简单、部署成本低、各层无缝集成、耦合度低、后期维护方便等优点。

本文将就J2EE框架的特点,来讨论J2EE的轻量级SSH(Struts2+Spring+Hibernate)框架,对各层的集成方案进行研究,并通过医院病房信息管理系统项目具体分析SSH框架的应用。

1轻量级J2EE中SSH框架的研究

轻量级J2EE框架是一种开源的框架,跟传统的J2EE基本框架一样。根据它的功能,将其应用分为表示层、业务逻辑层和数据持久层,各层之间以松耦合的方式耦合在一起,

收稿日期:2013-10-16各组件并不以硬编码方式耦合。SSH架构中Struts用来实现表现层,直接面向用户,响应用户的请求,并向用户提供其所需数据;Spring实现业务逻辑层,借助IoC容器和AOP实现,集中处理系统的企业级服务;Hibernate实现数据持久层,负责数据的持久化以及Java对象与关系数据库的ORM功能。

SSH框架

Struts2框架

Struts是现今Web开发技术中运用最广泛的开源框架,是最流行的MVC组件,可以实现表示层,主要用于管理用户请求、调用业务层逻辑和处理异常。Struts框架具有组件的模块化、灵活性和重要性的优点。Struts可以更清晰地把模型、控制器和视图分开,简化了基于MVC的Web应用程序的开发,使页面更加简洁,以便于后期项目的维护和升级。

在过去,Struts1是所有MVC框架中的胜利者,但随着Web技术的不断发展和Web应用的不断扩大,Struts1的缺陷和局限也逐渐显现出来。Struts2是在WebWork基础上发展来的,它使用拦截器作为处理方式,以用户的业务逻辑控制器为处理目标,创建一个控制器代理。由它负责处理用户请求,处理用户请求时回调业务控制器的execute方法,Struts2将怎

样的视图呈现到用户是由该方法的返回值决定的。

Struts2的工作流程:Web应用启动时,Struts框架加载并初始化Actionservlet,并从Struts.xml中读取存放到各种配置对象中的配置信息。当Actionservlet接收到用户请求时,执行一连串的流程,最后指向的JSP组件生成动态页面,并且返回给用户。Struts2的框架结构如图1所示。

Spring框架

Spring是用在业务层的框架,Spring致力于J2EE应用各层的解决方案,而不是仅仅只专注于某一层的解决方案。Spring始终贯穿表示层、业务逻辑层和数据持久层,它提供了管理业务对象的一致方法并且鼓励对接口编程而不是对类编程的良好习惯。Spring提供了一个细致完整的MVC框架,为模型、视图和控制器之间提供了一个非常清晰的划分,各部分耦合度极低。Spring的MVC是非常灵活的,它完全基于接口编程,真正实现了与视图无关。Spring通过IoC依赖注入、AOP应用、面向接口编程,来降低业务组件之间的耦合度,增强系统扩展性。

Spring能简化企业级开发,大部分情况下可以用简单的Javabean来代替实现复杂的EJB。在程序设计中可以充分利用Spring依赖注入的特性,当修改类的属性时不用直接修改类的代码,而只用在配置文件里面进行简单的设置。

Hibernate框架

Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中区。Hibernate不仅管理Java类别到数据库表的映射(包括Java数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度缩短使用JDBC处理数据持久化的时间。

Hibernate的优势包括带有开源和免费的License,可方便在需要时研究源代码,并改写源代码,或进行功能定制;其次是采用轻量级封装,从而避免了引入过多复杂的问题,调试容易,可减轻程序员负担;第三是具有可扩展性,API开放,在功能不够用的时候,可自己编码进行扩展;同时还包括开发者活跃,产品有稳定的发展保障等。Hibernate的结构框架如图2所示。

轻量级J2EE中SSH框架的研究及其应用

1.2 SSH框架的整合

1.2.1 Spring与Struts2的整合

如果要达到Struts2与Spring集成的最佳效果,必须使用Spring的IoC容器进行Action的管理,并利用依赖注入为控制器注入业务逻辑组件。这种整合流程的组件协作图如图3所示。

图3 Spring与Struts的整合流程图

在图3中,Struts只是配置一个伪控制器,这个伪控制器的功能实际由Spring容器中的控制器来完成,这就实现了让核心控制器调用Spring容器中的Action来处理用户请求。

在这种整合策略下,处理用户请求的Action由Spring插件负责创建,但Spring插件创建Action实例时,并不是利用配置Action指定的class属性来创建该Action实例,而是从Spring容器中去除对应的Bean实例来完成创建的。Spring容器为控制器注入业务逻辑组件,这也是Spring和Struts整合的关键所在。

Spring与Hibernate的整合

Spring使用DAO对象通常的事务管理用来分离数据访问和事务处理,无论是在多个DAO接口还是在多方事务的情况下,Spring都能使多种DAO对象无缝地协同工作。Spring把数据源、Hibernate的会话工厂以及应用中的DAO实现类通过一致的配置管理起来,通过IoC机制自动维护它们之间

的关系。Spring与Hibernate的无缝集成为我们提供了自动的Hibernate会话管理、声明性的事务管理,极大地减小了开发时的编码量,提高了开发的效率,增强了代码实用性。

2SSH框架的应用

本文以医院病房管理系统实验室的项目为应用实例,该项目就是采用基于MVC模式的J2EE体系结构来实现B/S的多层Web应用,该项目的Web分为表示层、业务逻辑层、数据持久层以及数据库层几层。项目以MyEclipse、Dreamweare为软件工具,Mysql作为后台的数据库,选择Java、JSP、JavaScript、HTML作为应用开发工具,运用Tomcat服务器技术,项目完全基于B/S模式进行设计并实现。

图4所示是其SSH框架结构。在整个项目中,表现层的实现是基于Struts架构。Struts的核心是控制器组件ActionServlet,在设计每个模块的控制器组件时,都会定义一个配置文件struts.xml来配置业务流程。业务逻辑层的数据来源于数据持久层PersistentObject和表示层FormBean,是表示层和持久层进行数据通信的中间层。它负责封装持久层提供的数据对象,并为表现层提供功能接口,由Business组件实现。数据持久层是基于Hibernate来实现的。实现过程中,需要创建配置文件、定义持久化类、对持久化对象进行映射定义和实现持久化操作。在系统中采用XML进行定义数据库连接的各种参数以及供Hibernate管理事务、产生SQL和管理JDBC连接时所涉及的数据映射文件等,Hibernate根据这些属性来连接数据库。

图4SSH框架结构

Struts与Spring集成

对于Struts来说,所有的请求最终都会被Action所接收到,通过Action去呼叫业务逻辑层的相应业务逻辑服务对象来处理客户请求。我们需要在Action里面去实例化某个具体的业务逻辑服务对象,通过Spring来实现二者的松耦合。其具体方法如下:

把Struts2-spring-plugin和Spring相应的jar包加到项目中。

在web.xml中配置Spring监听器。

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

<!--default:/WEB-INF/applicationContext.xml--></listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml</param-value>

<!--<param-value>classpath:beans.xml</param-value>

-->

</context-param>

如果没有使用contextConfigLocation指定配置文件,则Spring自动查找applicationContext.xml配置Strutsactiono用SpringIoC注入弓囲的业务逻辑类实例。

在struts.xml中配置action,这样,它的class就不是一个类了,而是在applicationContext.xml中定义过的类ID。<struts>

<constantname="struts.devMode"value="true"/>

<constantname="struts.i18n.encoding"value="utf-8"/>

<packagename="hosSystem"extends="struts-default"><!--==========Doctor角色相关Action============-->

<!--显示病人-->

<actionname="inquiryDocPatient"class="com.hubu.action.InquiryDocPatientAction">

<resultname="listPatient">/doctor/allpatients.jsp</result>

<resultname="listDocPatient">/doctor/docpatients.jsp</result>

</action>

</package>

</struts>

Spring与Hibernate的集成

在Spring框架中,只要在Spring的配置文件applicationContext.xml中配置sessionFactory的bean,Spring就可以和Hibernate联系起来。配置文件中的class属性必须是真正的实现类,而不是接口。方法如下:

在applicationContext.xml中创建数据源。

在applicationContext.xml中创建sessionFactory。

修改dao包下的持久类实现,继承HibernateDaoSupport实现。

在applicationContext.xml中配置dao类。

<beanid="nurseInquireDao"class="com.hubu.dao.impl.

NurseInquireDaoImpl">

<propertyname="sessionFactory"ref="sessionFactory"/></bean>

服务层通过Spring注入引用的dao类实例。

Struts2拦截器

为了实现权限管理,这里使用Struts2拦截器,事实上,权限管理模块有一个专门的包,叫action.authority。拦截器在Struts配置文件中的配置信息如下:

<!--==========session权限检查拦截器===========-->

<interceptors>

<!--session检查-->

<interceptorname="sessionCheck"class="com.hubu.action.authority.CommonIn

terceptor"/>

<!--护士权限、session检查-->

<interceptorname="nurseAuth"class="com.hubu.action.authority.NurseAuthorit

yInterceptor"/>

<interceptor-stackname="nurseStack">

<interceptor-refname="defaultStack"/>

<interceptor-refname="sessionCheck"/>

<interceptor-refname="nurseAuth"/></interceptor-stack>

<!--医生session检查-->

<interceptorname="doctorAuth"class="com.hubu.

action.authority.CommonIn

terceptor"/>

<interceptor-stackname="doctorStack"><interceptor-refname="defaultStack"/><interceptor-refname="sessionCheck"/></interceptor-stack>

</interceptors>

3结语

在SSH架构中,Struts作为前台控制框架简化了程序的开发,使得界面开发人员和Java程序员实现了很好的分离,增强了项目的可扩展性,提升了项目的开发效率,降低了开发成本。Spring则通过控制反转,层层回调,极大地减少了业务逻辑代码。而Hibernate则极大地减少数据库相关操作代码,实现一个简单高效的持久化。

SSH框架的使用有效地缩短了系统开发周期,提高了软件开发效率,简化了程序代码,使得程序的层次结构更加清晰,提高了编程效率,实现了用户界面、业务处理和数据访问的分离。

20211117_6193dc65cdf09__轻量级J2EE中SSH框架的研究及其应用

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

汽车SoC半导体IP领域的顶级提供商Arasan推出了一个完全集成的解决方案:结合CANsec Acceleration IP的CAN-XL IP(适用于安全CAN总线事务)...

关键字: CAN IP 加速器 无缝集成

Sphera宣布,其长期客户、全球创新型特种材料企业伊士曼(Eastman)正与其就即将推出的Sphera生命周期评估(LCA)自动化软件的迭代开展合作。今年早些时候,Sphera推出了下一代LCA自动化解决方案,该解决...

关键字: 自动化 自动化软件 无缝集成 MT

前端传递:表名 user,字段 username 字符串、age 数字、is_ikun 布尔,并且把这些值封装为了一个对象

关键字: 框架 前端

摘要:物联网是新一代信息技术的重要组成部分,语音的实时通话在物联网时代中更加体现出科技的不断应用与创新。文章主要介绍了物联网下的音频实时通信技术。具体阐述了系统方案的分析与技术,以及系统平台的搭建和实现方法,同时结合病房...

关键字: 物联网 嵌入式 实时 语音 病房信息管理系统

摘 要:为了网购平台能在服务器端更加有效而稳定的运行,以JavaEE的SSH框架和MySQL数据库为基础,结合JQuery 等技术,利用Eclipse开发了一个网络商城系统。该系统主要分为前台和后台两个部分,前台供用户注...

关键字: JavaEE SSH MySQL Eclipse 网络商城系统

在软件研发这个领域,程序员的终极目标都是想成为一名合格的架构师。

关键字: 架构 框架 软件研发

MobaXterm是一款功能强大的远程终端登录软件

关键字: Mobaxterm SSH

在芯片性能提升有限的今天,分布式训练成为了应对超大规模数据集和模型的主要方法。本文将向你介绍流行深度学习框架 PyTorch 最新版本( v1.5)的分布式数据并行包的设计、实现和评估。 论文地

关键字: pytorch 机器学习 框架

近日,中国国防科技大学、美国加州大学洛杉矶分校和哈佛医学院的研究人员研发了一个深度强化学习框架FINDER。相比于现有的解决方案,FINDER能够更快速、更高效地找到复杂网络中一组最关键的节点,

关键字: AI 开发 框架

工业级沉浸式头显厂商Varjo日前为XR-1开发者版发布了作为抢先体验功能的实时色度键控和标记追踪。 团队表示,他们是首家将对绿幕技术十分关键的实时色度键控功能带给混合现实设备的公司,而

关键字: 色度 无缝集成 开发者 模拟
关闭
关闭