HI,欢迎来到云研学术,期刊咨询:130-7314-7102  订阅咨询:130-7314-7102 
0
首页 精品范文 spring框架

spring框架

时间:2023-05-30 08:54:22

spring框架

第1篇

【关键词】struts2;hibernate;spring

中图分类号:TP39 文献标识码:A 文章编号:1006-0278(2013)07-192-01

一、struts2框架

(一)struts2框架的概述

Struts2也是以控制器为核心,它包括核心控制器(FilterDispatcher)和业务控制器及用户实现的的业务逻辑组件。

Struts2框架的大致处理流程如下:

1.浏览器发送请求,例如请求/mypage.action、/reports/ myreport.pdf等。2.核心控制器FilterDispatcher根据请求决定调用合适的Action。3.Struts 2的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上传等功能。4.回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。5.Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支持Velocity、FreeMarker等模板技术

(二)struts2框架的体系结构

Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。

Struts2框架的处理流程如下:

1.加载类(FilterDispatcher)2.读取配置(struts配置文件中的Action)3.派发请求(客户端发送请求)4.调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action)5.启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)6.处理业务(回调Action的execute()方法)7.返回响应(通过execute方法将信息返回到FilterDispatcher)8.查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROR,将跳转到哪个jsp页面)9.响应用户(jsp--->客户浏览器端显示)10.struts2标签库(相比struts1的标签库,struts2是大大加强了,对数据的操作功能很强大)。

二、Hibernate框架

(一)Hibernate框架的概述

Hibernate是一个非常优秀的ORM(Object Relational Mapping对象关系映射)框架。

对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作。

hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

(二)Hibernate框架的体系结构

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

三、Spring框架

(一)Spring框架的概述

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。

(二)Spring框架的体系结构

第2篇

关键词Spring;Acegi;认证;授权

Spring框架和Acegi安全框架介绍

1、spring框架

Spring框架是由OpenSource开发的一个优秀的多层J2EE系统框架,它为企业级应用提供了一个非常轻量级的解决方案,大大地降低了应用开发的难度与复杂度,提高了开发的速度。

Spring框架的核心是IoC和AOP。IoC是一种设计模式,即IoC模式。IoC模式进一步降低了类之间的耦合度,并且改变了传统的对象的创建方法,实现了一种配置式的对象管理方式,Spring框架中由IoC容器负责配置性的对象的管理。IoC模式极大的提高了系统开发与维护的灵活性。

AOP是一种编程模式,它是从系统的横切面关注问题。传统的面向对象编程OOP主要从系统的垂直切面对问题进行关注,对于系统的横切面关注很少,或者说很难关注,这样当考虑到系统的安全性、日志、事务以及其他企业级服务时,OOP就无能为力了,只能在所有相关类中加入类似的系统服务级的代码。AOP为解决系统级服务问题提供了一种很好的方法。AOP将系统服务分解成方面看待,并为类提供一种声明式系统服务方式。Java类不需要知道日志服务的存在也不需要考虑相关的代码。所以,用AOP编写的应用程序是松耦合的,代码的复用性就提高了。

2、Acegi安全框架

借助于Spring框架,开发者能够快速构建结构良好的WEB应用,但现有的Spring框架本身没有提供安全相关的解决方案。同样来自于OpenSource社区的Acegi安全框架为实现基于Spring框架的WEB应用的安全控制提供了一个很好的解决方案。Acegi本身就是利用Spring提供的IoC和AOP机制实现的一个安全框架,它将安全作为J2EE平台中的系统级服务,以AOPAspect形式。所以借助于Acegi安全框架,开发者能够在Spring使能应用中采用声明式方式实现安全控制。

Acegi安全框架主要由安全管理对象、拦截器以及安全控制管理组件组成。安全管理对象是系统可以进行安全控制的实体,Acegi框架主要支持方法和URL请求两类安全管理对象;拦截器是Acegi中的重要部件,用来实现安全控制请求的拦截,针对不同的安全管理对象的安全控制请求使用不同的拦截器进行拦截;安全控制管理部件是实际实现各种安全控制的组件,对被拦截器拦截的请求进行安全管理与控制,主要组件包括实现用户身份认证的AuthenticationManager、实现用户授权的AccessDecisionManager以及实现角色转换的RunAsManager。安全管理对象、拦截器以及安全控制管理组件三者关系如图1所示。

Acegi安全框架在基于Spring框架的系统中的应用

1、分析系统安全性需求

首先,需要明确进行安全控制的对象,可为业务方法和URL资源。

其次,需要进一步明确,系统身份认证资料和资源授权信息的数据持久化形式。

2、Acegi安全系统数据库设计

在Acegi框架中支持多种安全信息的持久化方式,可以在配置文件中配置或存放在关系数据库。由于在实际应用中,需求是经常发生变化的。所以,在配置文件中配置是满足不了实际应用需求的。然而,Acegi本身对权限表的设计非常简单,users表{username,password,enabled}和authorities表{username,authority},这样简单的设计肯定无法适用复杂的权限需求。为了解决权限管理的复杂性,在这里引入了role(角色)的概念,使得用户和权限分离,一个用户拥有多个角色,一个角色拥有多个相应的权限,这样就更灵活地支持安全策略。

同时,为了更好地配合Acegi安全框架,还引入resource(资源)的概念,资源可分为URL和FUNCTION(方法)两种,一个权限可以对应多个资源。具体的数据库设计见图2。

图1安全管理对象,拦截器和安全管理组件交互图

图2Acegi安全控制系统数据库设计

3、认证管理器,授权管理器的配置

实现系统的安全控制,首先需要对系统的安全管理器和授权管理器进行配置,系统进行认证和授权需要获取安全信息,Acegi本身提供了对认证信息的获取机制,在实现认证与授权过程中,系统将主动根据配制信息和相应的信息解释安全信息的读取。图3给出了一个将用户安全信息存储在数据库中的认证管理器的配置示意图。

对应于图示的XML配置文件的代码如下:

/*配置数据库datasource和Acegi的jdbcDao*/

${jdbc.driverClassName}

${jdbc.url}

${jdbc.username}

${jdbc.password}

/*配置用户信息的加密算法*/

Class=”org.acegisecurity.providers.encoding.Md5passwordEncoder”/>

/*配置缓存有效时间*/

…//这里对缓存有效时间进行设置

/*配置daoAuthenticationProvider*/

class=”org.acegisecurity.providers.dao.DaoAuthenticationProvider”>

/*配置认证管理器*/

授权管理器的配置方法与认证管理器的配置基本类似,这里不再讨论。

4、安全请求拦截器的配置

以上配置完成后,就需要配置安全拦截器。不同的安全管理对象需要使用不同的安全拦截器。对于方法级的安全认证需要使用的拦截器为MethodSecurityInterceptor,而应用于URL资源的安全拦截器为FilterSecurityInterceptor。其中,MethodSecurityInterceptor拦截器是借助于SpringAop实现的,而FilterSecurityInterceptor拦截器是借助于ServletFilter实现的。本文以URL资源请求的安全拦截器为例说明配置情况。

由于URL资源请求安全拦截是借助于过滤器进行的。因此首先要配置AcegiServlet过滤器。过滤器类似于AOPAround装备,实现在web资源调用前后进行的一些操作6种过滤器,他们依次构成Servlet过滤器链,依次处理客户请求。需要注意的是过滤器配置的顺序是不能交换的,当不需要使用某个过滤器时,可直接将其删除和注释。过滤器在web.xml中配置形式为

AcegiHTTPRequestSecurityFilter

org.acegisecurity.util.FilterToBeanProxy

targetClass

Org.acegisecurity.intercept.web.SecurityEnforcementFilter

AcigiHTTPRequestSecurityFilter

/*在springapplicationContext.xml文件中的配置形式为

以上代码是SecurityEnforcementFilter的配置,该过滤器对用户是否有权访问web资源作出最后的决定。其它的过滤器的配置类同。

配置完过滤器后,需要对拦截器FilterSecurityInterceptor进行配置,

Class=””>

1class="org.xiaohongli.acegi.db.DBFilterObjectDefinitionSource">

objectDefinitionSource属性定义了那些受保护的URL资源,其中引用了一个本地对象filterObjectDefinitionSource。filterObjectDefinitionSource类从数据库中读取需要保护的URL安全信息,它扩展了PathBasedFilterInvocationDefinitionMap类。

同样,实现了另外一个methodObjectDefinitionSource类从数据库中读取需要保护的FUNCTION资源,它扩展了MethodDefinitionMap类。限于篇幅,在这里就不列出具体实现的源代码。

class="org.xiaohongli.acegi.db.DBMethodObjectDefinitionSource">

第3篇

关键词:Spring MVC框架;Web登录系统;B/S架构;session对象

1 概述

随着世界经济的繁荣和科技的迅猛发展,信息化的程度越来越高,各种软件相继出现。大批量种类繁多的软件虽然提高了信息处理的效率,但是安全方面的隐患也日益突出。用户想要进入到不同的应用软件和服务系统时都必须进行登录认证,随之而来的遗忘密码、黑客攻击、密码泄露等问题,都将严重干扰到业务运作。在这种情况下,一种安全可靠的用户登录模块就显得必不可少。

基于这种情况,该文研究了如何利用Spring MVC框架开发一款安全、灵活的Web登录模块。系统的任何用户操作界面都可以提供登录入口,提示用户进行登录,通过认证后,合法用户就可以使用他相应的权限功能。

2 Spring MVC框架概述

Spring是分层的Java SE/EE应用一站式的轻量级开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring框架提供了构建Web应用程序的全功能 MVC 模块。在Spring的MVC中,支持各种视图技术,例如JSP、Velocity、Tiles等。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring MVC的角色划分非常清晰,各组件的功能单一,很好地达到了高内聚低耦合的效果。Spring MVC相当灵活,且可以扩展,其MVC框架是围绕 DispatcherServlet这个核心展开的。核心控制器的作用就是截获请求,并将其分发到相应的业务控制器中,由业务控制器调用业务处理方法处理业务逻辑,返回一个模型和视图对象,核心控制器再根据此对象找到视图显示出处理结果。

3 登录模块的设计与实现

本登录模块采用B/S的三层结构模式,分为服务器、用户和数据库三个部分。客户端与服务器之间采用HTTP协议进行通信,Web服务器采用Tomcat6.0,数据库服务器采用Oracle10.0.2。在用户登录模块的开发过程中,提供对身份认证、权限分配等有效的安全策略,来实现用户的验证与登录,在没有得到系统授权的前提下是无权对文档进行浏览和管理的。

3.1 总体设计

用户登录模块按照不同的人员职责,提供不同的登录界面,具体包括系统管理员、管理员、游客等登录界面。有游客,管理员,身份证,电话号码+密码等多种登录方式。

登录模块采用基于角色的身份认证技术,根据不同的用户角色,提供不同的登录选项,分配不同的使用权限。根据实际情况定义了三种角色:超级管理员、管理员、注册用户,通过登录界面确认用户的身份,再根据不同的用户类型确定其相应的操作权限。

其中,超级管理员具有对角色、权限、菜单等进行增删改查操作以及角色的赋权。管理员具有对用户账号管理,信息的修改、统计等处理权限。注册用户具有修改个人资料,信息浏览等权限。

3.2 数据库配置

public UserInfo getUserByUserName(String userName){

UserInfo userInfo=null;

try{

userInfo=(UserInfo)

getSqlMapClientTemplate().queryForObject("USERINFO.getUserByUserName", userName);

}catch(Exception e){

logger.error(e);}

return userInfo;}

3.3登录模块的实现

本模块登录时没有区分用户角色,当进入系统后根据角色权限加载菜单项。用户通过输入用户名和密码,然后单击登陆按钮实现以上信息的提交并验证,若正确无误进入系统。

3.3.1错误锁定

登陆模块根据用户身份进入系统,显示拥有权限的操作菜单。如果用户不存在,则找不到数据;如果用户存在,密码错误,同样找不到数据,均提示用户名密码错误;如果用户名和密码同时存在,则获取用户信息,并进入相应的界面。为系统安全考虑,若用户连续而且超过三次输入密码错误,则需要输入验证码。errorTime为输入错误次数,当验证码输入为空,或输入错误,就返回-1,此时对该账号锁定, 登录失败,必须经过超级管理员解锁才能重新使用。部分代码分析如下:

if(errorTime>=3){

if(entryVlidateCode==null||(!entryVlidateCode.equals(realValidateCode))){

map.put("errorMsg","验证码错误");

map.put("userInfo",null);

map.put("errorCode",-1);

return map;

}}

3.3.2在线提示

用户在登录时,会创建一个session,用于保存用户信息。如果在线用户列表中查找到该用户已经在线,同时又在其他机器登录,那么首先提示用户已经在线,然后给出选择挤下或者取消登录。如果挤下,那么被挤机器就无法继续前后台的数据交互,自动退出,登录失败。也就是限制用户重复登录,每个时刻只允许在一台机器上登录。

先从ServletContext中取出存放用户登录的session相关信息,检查这个列表,若已经存在相同的登录信息,则说明用户之前已经登录过,移除前面一条记录。再把此次登录的信息加入到ServletContext中。监听实现SessionListener类,当session失效的时候,从ServletContext中移除相应记录。过滤所有页面,sesison失效后转向登录页面。但是要实现用户二次登录后强制先前的登录失效,需要在这里控制。登录时存入的是session值和session ID,用户二次登录时移除了前次记录,存入的session值是相同的,但是ID却不同。 当第一次登录页面请求的时候,在这里检查ServletContext中是否存在当前的session值与ID,如果没有就销毁这个session。

3.3.3非法退出

对于WEB系统来说,均遵循HTTP协议的请求/应答模型。所以网站本身是不能保存数据的,用户正确登录后,系统更改当前用户的状态为在线。如果用户在使用系统时,不通过退出按钮来执行退出操作,而是非法退出,包括网络断线、系统瘫痪、突然断电等情况。这些都使系统没有给用户记录一个退出系统的操作机会,这种情况下用户的在线状态会一直保留,从而影响下次登录。因此,系统应该设置一个定时器,定时清理并且还原用户的初始状态。

当用户以登陆身份请求服务器资源时,记录用户的最后活跃时间。接着拟定一个失效时间,假设某个用户的最后活跃时间和当前时间的差值大于这个失效时间,也就是说该用户这一段时间都没有和服务器交互了,那么就认为该用户已下线,否则认为他是在线的。

3.3.4超时管理

Session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。应用session对象时要注意它的生命周期,当用户首次访问时将产生一个新的会话,从用户打开网站生成,关闭浏览器删除,以后服务器就会记住这个会话状态,在这一段时间内,用户都可以访问到会话对象中保存的信息。当会话生命周期超时,或者服务器端强制使会话失效时,这个session就不能使用了,需要用户重新登录。

通过setMaxInactiveInterval()方法可以设置Session的生命周期,通过getMaxInactiveInterval()方法可获得Session的生命周期,如果超过这个时间则失效。

4 结束语

信息的规范化、高效化管理在很大程度上体现了一个组织的工作效率,而登陆功能在其中起到了关键性作用,同时也为系统提供了安全性保障。该文对Web登录模块进行了分析,使用Spring MVC框架进行设计,提出了解决方案,实现了系统用户的登录、出错处理、超时检查等功能,使系统的重用性和扩展性更好,用户界面简洁统一,功能灵活,提高了系统的易用性、安全性及稳定性。

参考文献 :

[1] 刘震宇,肖武魁.基于J2EE框架与ExtJS的Web系统登录设计[J].中南林业科技大学学报,2010(8).

[2] 张瑞青,李铁柱.基于SpringMVC的用户登录系统的设计与实现[J].科技信息,2012(10).

第4篇

关键词:Spring;轻量级框架;JavaEE

中图分类号:TP31 文献标识码:A文章编号:1009-3044(2008)20-30275-02

Spring Based Lightweight Frameworks JavaEE Application and Development

LIU Zhi-liang1,2, LIU Yuan-yuan1,2

(1.The College of Electrical Engineering & Information Techology of China Three Gorges University, Yichang 443002,China; 2.Wuhan Vocational College of software and engineering, Wuhan 430205,China)

Abstract:This article is an overview of Spring based lightweight frameworks application. It introduces the concepts of Spring and lightweight frameworks. It’s design a solution to JavaEE application with Spring based lightweight frameworks. Thus to let you understand how to develop J2EE with Spring based lightweight frameworks.

Key words:POJO; lightweight framework; JavaEE

今天,越来越多的的企业开发人员希望能够快速开发安全可靠的、可扩展的分布式企业应用,尤其是以浏览器为前端的Web应用。随着企业应用的规模的快速增长,越来越多的企业将JavaEE平台作为企业级开发的基础。

1 传统JavaEE开发模式

在JavaEE平台诞生的日子里,JavaEE几乎就是企业级开发的代名词,当然作为JavaEE中最核心的EJB技术,也一度成为JavaEE应用的核心。EJB框架提供了大量的有用的服务和操作,简化了分布式应用的开发时间。比如:EJB提供的声明式事务:EJB容器为应用自动的开始、提交和回滚事务,使我们无须再编写大量的事务管理代码。另外使用企业级Java Bean(Enterprise Java Bean)完成业务逻辑能参与在远程客户端的分布式事务。EJB还能提供声明式的安全机制,它让我们几乎可以不必写再安全代码。

然而,EJB在带来了这些好处的同时,也带来了不必要的复杂性:首先编写EJB组件是复杂的,为了实现一个EJB组件,除了EJB本身的实现类外,还不得不编写额外的接口。此外,部署和测试EJB也是非常复杂的事情。

2 基于Spring的轻量级JavaEE框架

随着EJB带来如此不必要的复杂,许多开发人员开始思索和反思,并试图以更简单的Java技术来简化JavaEE的开发。Rod Johnson 总结了他数年的JavaEE项目经验,提出了一系列以轻量级框架为核心的全新的JavaEE设计思想。并发展成为Spring框架。通过Spring这个轻量级框架,我们可以轻松的实现过去必须使用复杂而烦琐的EJB才能实现的功能。更重要的是Spring抛弃了EJB这种重量级组件,以JavaBean作为实现轻量级框架的组件,使JavaEE的开发更加简单,而且降低了应用的耦合。

Spring为企业开发提供了一个轻量级的解决方案。该方案包括:基于依赖注入的核心机制,基于AOP的声明式事务管理与多种持久层技术的整合,以及优秀的Web MVC框架等。

Spring为J2EE的业务逻辑层、表现层及数据持久层都提供了极好的解决方案,因为Spring不仅仅是一种框架,而且提供了一种企业级应用的开发规范。Spring是实际开发的抽象,其提供的模版设计大大简化了应用的开发。

Spring的系列Template将通过步骤以优雅的方式完成,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业级应用的开发效率。

Spring支持对POJO的管理,能将J2EE的各层应用“焊接”在一起,甚至这些对象无需是标准的JavaBean。

3 构架性构架

基于Spring的轻量级JavaEE框架和传统的JavaEE应用系统一样,主要有三种核心构件:业务服务层,在成功的应用系统中,它占有最主导的地位;表示层:它可以是一个UI,也可以是一个远程门面;数据访问层:它管理对象的持久化。

3.1 业务服务层

一个成熟的架构中必须包含一个严格而完备的服务层,它是JavaEE应用的核心。从分层上看,业务服务层位于中间层次,这个层完成业务逻辑功能,并且把业务逻辑提供给客户端(比如Web用户界面或桌面用户界面等)。在基于Spring的轻量级JavaEE框架中使用POJO构成服务层,它们运行在Spring轻量级容器中,由Spring来管理它们,这样就能够取代EJB原有的结构,而EJB大部分的复杂性。

3.2 数据访问层

数据访问层负责数据持久化以及对持久化数据的访问。数据访问层设计的目的是为系统提供一个独立的、统一的、安全的、高效的数据持久机制,将复杂的业务逻辑和数据管理分开,从而降低系统的耦合度,提高系统的健壮、可维护性和可扩展性。传统的JavaEE中数据访问技术包括JDBC和entity bean。而我们的轻量级JavaEE框架推荐使用对象关系映射ORM(Object/Relational Mapping)持久化策略。现在有许多现有的O/R框架,比如Hibernate、iBatis等。Spring自身并没有提供任何ORM方案,但Spring的ORM为集成许多流行的ORM框架提供了良好的支持,可以非常方便的将其纳入到Spring的事务管理中。而且Spring DAO定义了一个访问数据库的一致的接口,大大提高了系统的开发效率。

3.3 表示层

表示层是系统和用户交互的部分,最常见的就是通过Web界面提供企业服务。表示层向用户展现了系统的功能,响应用户的请求,并且向用户层现处理结果。成熟的方式是通过MVC(模型-视图-控制器)模式来组织表示层。分离用户界面代码和业务逻辑。然后通过控制器匹配视图和模型,减少系统中的耦合。Spring提供一个全功能的MVC框架,供系统使用。另外Spring也可以很好的集成Struts、WebWork等当前流行的MVC框架。

上图向我们展示了轻量级JavaEE构架方案。从上图可以看到,轻量级容器是整个系统的核心。所有的Java类都运行在同一个虚拟机中。从用户角度看,Web层是由MVC框架提供的。我们可是使用专用的MVC框架,比如Struts或WebWork或Spring自带的MVC框架。业务对象是POJO,运行在轻量级容器里。AOP的拦截机制能够增强业务对象,从而实现企业级服务,通过接口访问业务对象。数访问机制可以通过O/R映射实现,该层能够通过透明的持久化;如果O/R映射在某些情况下不能很好的应用,也可以使用JDBC实现。

4 结束语

即使拥有良好的工具和优秀技术,应用软件开发也是困难重重。应用开发往往牵扯到方方面面,每件事情都难以控制,而且,开发周期也很难把握(除非它的确是一个重量级的复杂应用,倒也有情可原)。Spring提供了一种轻量级的解决方案,用于建立“快装式企业应用”。在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去。你可以把Spring当作一个潜在的一站式企业应用。或者,把Spring看作一个标准开发组件,根据自己的需要,只取用它的部分组件使用而无需涉及其他。例如,你可以利用控制反转容器在前台的展现层使用Struts,还可以只使用 Hibernate集成编码 或是 JDBC抽象层 去处理数据存储。Spring被设计成(并将继续保持)无侵入性的方式,意味着应用几乎不需要对框架进行依赖(或根据实际使用的范围,将依赖做到最小)。

笔者现在的JavaEE应用项目全部采用这种基于Spring的轻量级的JavaEE应用,实践证明开发效率比以前提高了许多。除了上面介绍的基本框架之外,还应用到了使用Compass框架实现全文检索功能,使用Acegi实现安全框架。

参考文献:

[1] Rod Johnson.Expert One-on-One J2EE Design and Development[M].Indiana:Wiley publishing,Inc 2003.

第5篇

关键词:EJB;spring

中图分类号:G718 文献标识码:B 文章编号:1672-1578(2016)01-0379-01

EJB (Enterprise JavaBean)是JavaEE重要的组成部分,其定义和规定了一个用于开发基于组件的企业级多重应用的标准。EJB需要严格地实现和继承各种不同类型的接口,相类似的以及重复的代码功能大量存在。同时EJB的配置也是非常复杂和繁琐的,同样通过JNDI进行目标对象查找的也是相当耗时。对于开发者学习EJB的需要高昂代价和成本,项目的具有极低的开发效率,应用程序运行对资源消耗极高,这些缺点都造成了EJB的在使用中非常困难。

随着JavaEE技术在不同领域大规模广泛的应用,同时EJB技术也受到很多的质疑,EJB的使用给JavaEE应用开发带来了很大的开销成本和开发上的复杂性。在EJB3.0之前,就是一个简单的EJB组件都需要编程远程/本地接口、Bean实现类以及Home接口,这使得其应用受限。正是由于EJB应用非常复杂,因此EJB也被称为重量级组件。

为了克服重量级组件EBJ的缺陷,许多轻量级容器因此产生。轻量级容器,是因为它们能将简单的、普通的JavaBean作为应用组件,并通过IoC(Inversion of Control,控制反转)来解耦组件之间的依赖关系。随着轻量级容器的大量的被应用,开发者逐渐开始采用轻量级进行应用程序的开发。Spring框架正是轻量级框架的代表,其着眼于JavaEE应用开发的绝大多数方面,通过其分层架构,并针对它们提供了集成的框架和一揽子解决方案。Spring在数据库管理、事务管理、持久化管理、线程管理、远程调用等方面用轻量级方案替代EJB。Spring独立于各种应用服务器,它是一个开源的组件,我们可以把它视作一个容器,它可以在无应用服务器支持的情况下提供应用服务功能,如声明式的事务、持久化等。

Spring框架通过IoC容器解决了组件相互的依赖关系,Spring的核心是轻量级IoC容器和AOP(Aspect Oriented Programming,面向切面编程),可以通过简单的Java对象提供企业级的服务;通过AOP的声明式的服务,为允许应用的业务逻辑与系统级服务进行内聚性的开发。这些简单的服务,可以实现系统开发的灵活性、可扩展性和无侵入性。

Spring在当前是一个著名的开源框架,它是在实现简单的企业级系统开发应运而生的。Spring框架包括很多应用模块,这些模块在不同的层次进行扩展,下层为上层提供服务。分层架构是框架的主要优点之一,分层结构可以允许开发者选择不同的层进行使用不同的组件,同时为应用系统开发提供集成的服务。Spring提供了JavaEE应用的各层的完美解决方案,而不是只单纯的服务于某一层。Spring为企业级应用开发提供了"一站式"的解决方案,并贯穿常见的表现层、业务层和持久层[16]的支持。Spring框架包含常用组件的体系结构,Spring Framework架构按功能被划分为多个封装的模块。Spring模块的之间的装配十分灵活,在不同的应用场合中,可以通过框架基于不同的子集模块进行构建。

Spring框架包含相互独立存在的七个基本的模块:

SpringCore:Spring框架的核心模块。它提供基本的IoC容器的实现,即依赖注入。

SpringDAO:提供JDBC的抽象层,能提供编程方式和声明方式控制事务,使得开发者不用去编写非业务功能的JDBC代码。JDBC DAO抽象层提供了有意义的异常层次结构,Spring DAO 中的面向 JDBC 异常继承了通用的 DAO 异常层次结构,使得在使用过程中非常方便。

SpringContext:构建在Core模块之上,并对Core模块的功能进行了扩张。同时提供了高级Spring IoC容器的实现,提供了Bean的访问方式,并且增加了用于系统资源定义、绑定、资源装载、透明的装载上下文方式和事件移值等重要功能。

SpringAOP:它建立了面向方面编程框架,实现了AOP联盟定义的AOP编程实现。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务[17]。

SpringORM:为当前流行的对象/关系映射框架(例如Hibernate、MyBatis以及JPA)提供集成。

SpringWeb:提供面向Web应用集成的功能,同时将Spring作为这些Web框架(例如Struts、JSF等)的后端实现。

Spring Web MVC:该模块提供MVC的实现机制,本框架是一个包含全部功能的可以构建 Web 应用程序的 MVC 优秀实现。通过策略接口使得MVC 框架变成了可以高度可配置的,本框架实现了很多视图技术,常用的包括 JSP、iText 、Tiles、POI和Velocity。

以上各模块以分层的方式进行组织,下面的模块是服务上面的,上面的模块依赖于下面的模块,Spring Core模块位于整个体系结构的最底层,它是Spring Framework工作运作的基础。

参考文献:

[1] Flanagan D. JavaScript: the definitive guide[M]. " O'Reilly Media, Inc.", 2002.

[2] 吴晓明,潘永红,谢惠芳. 基于jQuery的中南大学门户网站Web UI的实现[J]. 武汉大学学报(理学版),2012,S1:361-364.

第6篇

【关键词】Javaweb;软件开发;框架技术

一、何为Javaweb软件开发框架

框架技术是为了解决在软件开发过程中的某一类通用问题而出现的一种软件技术,在Javaweb软件开发过程中,开发者通常需要面临三个方面的问题,首先即分层问题(MVC),如何将表现层、控制层、模型层进行有效的隔离,实现应用代码的解耦;其次是持久化的问题,Java是面向对象的语言,而数据持久化过程则是进行SQL语句的操作,如何将对象进行面向对象的持久化操作;再次,则是应用软件的集成、全局性配置问题,避免在软件代码中出现对象的生成过程,简化统一性的操作问题等都是Javaweb软件开发过程中面临的问题,因此,Struts、Hibernate、Spring框架应运而生,为开发者简化开发过程、提供项目管理方法提供了便利。除此之外,还存在日志管理问题、测试问题,下文则针对常见的Javaweb框架技术进行简要的论述。

二、常见的Javaweb软件开发框架技术介绍

(一) Struts框架

Struts框架作为Apache的顶级项目被Javaweb开发领域广为应用,该框架软件较好的实现了Javaweb软件开发所提倡的MVC应用架构。Struts有两个版本,即Struts1和Struts2,这两个版本之间并非传统意义上的继承发展关系,其中Struts2是由WebWork软件发展而来的,因此Struts1与Struts2之间差异较大。Struts框架主要是基于Javaweb API来实现的,将“表现层”与持久化层有效地隔离开来,使得应用开发者能够更加专注于核心业务,提高开发效率。Struts框架通过XML文件对应用进行配置,通过对来自浏览器以及服务器的请求和处理结果进行展示,达到应用软件表现层的功能需求,一般而言,Struts通过对浏览器提交的数据进行对应Pojo对象的封装,再通过Pojo来进行具体业务逻辑和数据持久化的操作实现面向对象编程,另外,对于服务器返回的数据同样是以Pojo类进行操作的,不同的是,Struts1要求必须继承于Action类,而Struts2就可以通过普通Pojo类来实现,将封装好的Pojo对象,通过Action的调用完成具体的业务逻辑,从而实现了整个Web应用的工作流程。总之,Struts框架是当前流行的表现层框架,在Javaweb开发中非常流行。

(二) Hibernate框架

Hibernate框架是ORM(Object Relational Mapping对象关系映射)数据持久化框架,该框架主要是对应数据库的操作,在没有ORM框架之前,应用开发者对数据库的操作主要是通过字符的拼接形成相应的SQL语句,这使得面向对象的开发过程出现了非面向对象的操作步骤(当然这对于用户而言是透明的),因此,以Hibernate框架为代表的ORM框架在应用程序开发过程中得到了广泛的应用。利用Hibernate,开发者可以通过save、delete、update等方法进行面向对象思维的数据库操作。Hibernate框架的核心接口主要有Session(执行CRUD操作)、SessionFactory(完成对框架进行初始化操作)、Transaction(事务处理接口)、Query(主要是完成查询操作)、Criteria(创建并执行面向对象的标准化查询)和Configuration(对框架进行配置操作)等,通过操作Hibernate框架的接口不仅仅能够实现数据库的一般性CRUD操作,同时还可以处理更加高级的事务性操作;除此之外,Hibernate还提供了缓存管理技术以及“懒加载”技术,通过缓存技术实现更加高效的数据持久化操作和执行效率。当然,Hibernate同样提供了传统意义的SQL操作。总之,Hibernate框架是Javaweb应用开发时最常用的ORM持久化框架技术之一。

(三) Spring框架

Spring框架主要是作为一种集成性技术为Javaweb应用开发提供便捷,一般认为Spring框架的核心任务主要体现在两个方面即IOC(控制反转)和AOP(面向切面编程),IOC主要是将对象的生成过程交予Spring框架来完成,开发者仅仅需要在相应的配置文件中进行简单的配置即可(有时候将IOC任务解释为DI(依赖注入),这主要是从软件代码的层次结构的角度来分析的);AOP技术则是进行横向编程的一种编程技术的创新,通过“切面”的添加十分便捷的实现用户身份鉴别、日志管理和事务管理等工作,使得开发者能够更加专注于核心业务的处理过程。当然,Spring框架除了核心业务以外,还有Spring MVC、Spring DAO等组件为开发者提供开发帮助。由此可见Spring框架正如其名一样,是Javaweb开发者的春天,有时候形象的称为应用程序的“大管家”,实现应用的全局性控制,除此之外,Spring框架不仅仅在Java领域有着广泛的应用,在.net应用程序开发时也同样发挥着非常关键的作用。总之,Spring框架技术作为集成性的框架也是非常重要的。

(四) JUnit框架

软件测试作为验证软件功能性、稳定性以及可靠性的重要阶段同样具有非常重要的意义,在Javaweb开发领域通常应用JUnit进行单元测试。对于软件的测试(这里主要是指白盒测试)通常包括几个步骤,回归性测试、单体测试、集成测试、真实环境下的测试,在利用JUnit进行Javaweb项目测试时通常只要将测试类继承TestCase即可进行自动化测试,目前多数的Java IDE都已经继承了JUnit测试工具,通常测试指标包含几个方面的内容,首先是逻辑代码功能的正确性,这是最为基础的测试内容,其次还包括代码的覆盖率,出现了不可达的代码对于应用程序是无意义的,最后则是性能和稳定性的测试,当应用并发性较高时应用程序能否进行稳定运行同样是非常关键的。总之,JUnit单元测试框架是进行Javaweb软件开发过程中最为常见和应用广泛的测试框架,作为程序员也应进行熟练的掌握。

(五)其他的框架技术介绍

上述框架是进行Javaweb开发过程中最为常见的开发框架,尤其是以Struts、Hibernate以及Spring组成的SSH框架组合几乎是企业级应用开发的必备框架,初次之外还有一些别的框架技术,例如以Log4j为代表的日志记录框架,使得应用开发者可以深度定制应用程序运行日志,配合断点等技术,快速定位查找程序BUG;同样的还有JSF(基于组件和事件驱动)表现层框架;追求高效性的iBATIS持久化框架等等,受限于篇幅的限制,本文就不一一的进行介绍了。除了Java服务器端的应用框架以外,在JSP页面同样有着javascript开发框架,如非常著名JQuery、EXT等等,应用开发者应根据应用的需求进行合理的选择和应用,实现开发效率和应用稳定的高度平衡。

三、Javaweb框架技术的不足之处

在Javaweb项目的开发过程中应用框架技术最主要的目的主要是实现项目开发的高可靠性以及开发效率的保障,但是随着框架技术的不断发展,开发者要熟练的应用框架技术进行项目开发还需要进行不断的学习和实践,这对于一些刚入门的开发者是非常不利的,例如在利用SSH框架组合进行开发时,往往由于各种配置文件的问题导致项目开发过程难以协调,使得入门级的开发人员工作难度急剧提高;除此之外,在进行一些非常简单的项目开发时,过多的强调框架技术的应用也是非常不可取,框架技术的引用容易造成项目复杂度的提升,不利于简单项目的开发。因此,Javaweb项目开发时,开发者应合理的选择框架技术,根据项目的实际情况进行有取舍的选择,从而项目过程的有序性。

四、小结

本文主要介绍了Javaweb程序开发过程中常见的应用框架技术,并浅析了框架技术的不足之处,为开发者合理选择、应用框架技术提供参考。

参考文献:

[1]王循. Java Web快速开发框架中部分关键技术初步研究[D].吉林大学,2015.

第7篇

关键词:留言板;Java EE;Struts2+Hibernate+Spring

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)24-5656-03

Developement of Message Board Based on Struts2+Hibernate+Spring

CAI Qun-ying

(Computer Science and Engineering Departmentof Hanshan Normal University, Chaozhou 521000, China)

Abstract: As a communication tool for web administrator with users,message board is a base function of a website. By analyzing its function,message board is developed based on Struts2+Hibernate+Spring. The message board hasthe advantage of clear logicalstructure, simple interface and easy to operate.

Key words: messageboard; Java EE; Struts2+Hibernate+Spring

Java EE是目前最为流行的主流技术之一,是建立在Java平台上的企业级应用解决方案,采用的是分层架构模式,而实施分层架构的,比较流行的是采用SSH框架即Struts2+Hibernate+Spring整合框架,这三大框架都是轻量级框架,本文以留言板为例,介绍整个实施过程。

1 系统架构与设计

系统采用MVC设计模式,M是业务逻辑,V是视图,C是控制器,由Struts2框架来实现,底层数据库的操作采用DAO设计模式,由Hibernate持久化框架来实现,当和Spring框架整合在一起之后,由Spring框架的HibernateTemplate模板来实现,DAO组件、Service组件和Action组件由Spring框架统一管理。

系统分为管理员和游客,游客不用注册就可以发表留言,管理员登录之后可以查看留言、回复留言和删除留言。

对于具有管理员权限才可以打开的页面,通过Struts2框架的拦截器实现拦截,确保必须正确登录后才可以访问。

具体的目录结构如图1所示:

2 数据库的设计

数据库采用Mysql,它是一个开源的数据库,通过Mysql Administrator管理工具进行数据库的创建,数据库包括留言表message和管理员账号表admin。创建表后,再由hibernate框架通过反向工程生成持久化类,分别为Message.java和Admin.java。

访问留言板的入口是listAll.action,通过它调用数据访问层DAO中的相应方法listAll方法,读取数据库message表中的记录,然后通过index.jsp显示出来。发表留言是通过insertMessage.jsp页面,在页面中填写有关的内容,然后提交给insert.action处理,也是调用数据访问层中的insert方法,将表单的信息添加到message表中。

整个流程中较复杂的是管理员回复留言,要经过两个过程,首先读取出要回复的那条留言,显示在reply.jsp页面中,然后填写回复内容后,再更新这条留言。具体流程如图3所示。

4 系统运行及总结

系统的运行如下,访问入口是listAll.action。游客浏览留言的页面如图4所示。游客点击发表留言,可进行留言,管理员点击“管理员登陆”可进入登录页面,输入用户名和密码就可以进入管理页面。

本系统功能简单,没有涉及到太多的表,表间没有任何关联。实施起来比较简单。

第8篇

科技发达的今天使得我国中小型企业越来越多的重视企业的信息化建设。Internet技术的迅速发展,企业内部业务复杂程度,公司软硬件等环境因素对于WEB的构建提出了较高的要求。如系统应具备很好的扩展性,可维护性,夸平台性等。要求多,自然给开发者的思维带来了少许局限性,必然需要一个清晰的开发的思维模式。一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力。它可以被扩展以进行内部的定制化并且有强大的用户社区来支持它,框架通常能很好的解决一个问题。基于java语言开发中SSH框架占据主导地位。

SSH(Struts、Spring、Hibernate的缩写)是当今一种比较流行的Web应用程序开源框架。继承SSH框架的系统基本上分为表示层、业务逻辑层和数据持久层。Struts作为系统的基础框架,Hibernate为持久层提供支持,Spring为业务层提供支持。它是一种基于J2EE技术的MVC软件开发框架,大大降低了程序开发的难度,提高程序的可复用性和可维护性,有效的降低了开发成本,缩短了开发周期。Struts框架继承了MVC的各项特性,很好的结合了JSP、Servlet等技术。在Struts中,ActionServlet提供了处理所有发送到HTTP请求的入口点,它截取和转发这些请求到相应的Action类的子类。Spring贯穿了整个中间层,将Web层、Service层、DAO层相结合,其数据服务层用来存放数据。它封装了所有对事物处理的功能,包括异常时事物回管操作,成功时数据提交等复杂业务功能大大减少了程序员的代码量。也对事物有了很好的管理控制。Spring框架可以成为企业级应用程序一站式的解决方案,同时它也是模块化得框架,允许开发者自由的选择喜欢的,适合自己的模块进行开发,Spring框架式是一个松耦合的框架,框架的部分耦合程度被设计为最小,在各个乘此上具体选用哪个框架取决于开发者的需要。Hibernate可以作为数据访问层通过配置文件和映射文件把java对象或持久化对象映射到数据库中然后通过操作持久化对象对数据表中的数据进行操作。Hibernate有自己的面向对象查询语言HQL,HQL功能强大,支持目前大部分的主流数据库,如Oracle、DB2、MySql、Microsoft Sql Server等。是目前应用最广泛的O/R映射工具Hibernate为快速开发应用程序提供了底层支持。

下面通过一个系统来说明如何进行基于Web开发的SSH框架的使用。这个系统为某通信公司运营部门开发的一个系统,由于系统模板比较多,下面就用一个用户管理模块为例子来说明系统开发的实现过程,并将按照数据持久层、业务逻辑层、表示层、的顺序说明系统的构建过程。数据持久层由java对象持久化类和数据访问对象DAO组成、每个数据表都对应着一个持久化的对象,这样就给予了开发者使用OO思想设计和开发的便利同时也屏蔽了具体的数据库和具体的数据表,字段,清除了对数据库操作的编码在重用上的弊端。Hibernate通过映射文件对象于关系型数据相关联,因此需要编写和数据库表相对应的java类和对应的映射文件。有了java持久化类就可以在这个基础上实现访问类。在Spring框架中数据访问类可以从辅助类HibernateDaoSupport来继承,这就大大的方便了Hibernate框架在Spring中的使用。相应的代码就不举例了。业务逻辑层由Spring框架支持,提供了处理业务逻辑的服务组件开发者需要对业务对象建模,抽象出业务模型封装在Model组件中。由于数据持久层实现了java持久化类并且封装了数据访问对象(DAO),所以可以在Model组件中调用DAO组件来存取数据。Spring的IoC容器统一管理Model组件和DAO组件以及Spring所提供的事物处理缓冲连接池等服务组件。表示层结合JSP和Struts的TagLib库处理现实功能,利用ActionServlet将请求(.do)映射到相应的Action,并由Action调用业务逻辑的服务组件,然后处理结果跳转到Forword对象制定的相应的JSP页面。

SSH框架即给开发者带来了清晰的思路,又使得使用者可以很明白的看清楚项目的构造。这样自己就修改或者维护项目,更清晰顺手的使用项目。这将是一种模式。未来的发展趋势。想在IT界有一席之地,SSH是不可遗漏的利器。虽然SSH框架为开发的主导方式,我认为它主要是针对比较大的项目,小的项目使用框架会很麻烦,而且小项目对可维护性的要求也不是很高。希望这篇文章可以对对着产生一定的启发。

第9篇

论文摘要:本文通过介绍框架技术特点,提出了基于五层web应用的框架整合结构。并在此结构上实现了城市公共信息服务平台的应用,为类似的电子政务应用提供了参考。

随着网络技术、信息技术的发展,各类信息充斥我们生活、工作及学习周围,但这些信息之间重复严重,数据准确度不高,社会公众很难准确获取与个人生活、工作、学习密切相关的本地数据和信息,进而影响人们的网络生活,因而各类专业的本地信息服务已成为当前互联网应用的一种趋势。由政府牵头整合政府、市场、企业等多方面资源,共同构建一个统一、开放、跨平台、系统结构层次清晰的城市公共信息服务平台,并以灵活多样的形式为本地公众提供准确、权威的信息服务已经成为当地互联网应用的一种重要需求。

基于j2ee技术标准体系的框架技术能够快速、有效地支持大中型web应用项目的开发,但是在大中型web应用中,可能存在几个层次,需要使用几个不同的框架。那么如何整合各层框架以让每个层在一种松耦合的方式互相协作,这是一个在软件工程领域实践性很强的课题。本文介绍了一个以spring框架为核心,结合struts、hibernate框架的一种快速有效构建web应用的框架整合策略,并在此整合策略基础上阐述了城市公共信息服务平台应用的设计思想和实现技术。

1j2ee框架技术特点

目前随着软件开发技术的发展,可重用、易扩展,而且是经过良好测试的软件组件,越来越为人们所青睐。这意味着人们可有充裕的时间用来分析、构建业务逻辑,而不是繁杂的代码工程。于是人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。

1.1spring框架

spirng框架是一个以控制反转(ioc)模式和面向方面编程(aop)思想为核心的轻量级框架,主要用于对中间层业务组件的管理。常用的中间件解决方案ejb是一种重量级的容器,主要有以下缺点:必须实现ejb的接口,对业务逻辑组件侵人性很大;应用依赖于ejb容器,不能单独运行,另外启动时间长,测试复杂、配置很困难。

首先,spring是一种轻量级的框架,是基于组件化、模块化的结构。它有分层的体系结构,因而针对spirng开发的组件不需要任何外部库,也可以选择某个模块独立使用,从而避免了ejb复杂、启动时间长的缺点。

其次,spring也是一个ioc容器。ioc模式是spring的核心,它的本质是由容器控制业务对象的协作关系,而非传统的用程序编码在业务对象直接控制,控制权由程序代码转移到外部容器。通过ioc模式可以很容易地管理和替换业务对象。

另外,spring又是比较全面的框架,它并没有象ejb一样从底层开始全面实现j2ee的功能模块。spring提供了大多数的层次功能模块,但它并不是从头开始实现的,它通过对其它框架技术的支持来实现各层功能。它包括springcore核心层、mvc模块、springdao、springorm、上下文控制、web表示层、面向方面编程7个功能模块。

1.2hibernate框架

hibernate是一种专业的对象关系映射(o/r)工具,通过hibernate的o/r映射,可以以对象化的方式处理数据库表中的记录。hibernate通过properties文件建立数据库连接,通过映射文件(.hbm.xm1)将数据库表映射为java类,表中的每条记录对应为类的实例,而数据列值映射为实例的属性。hiber—nate将这些实例以持久对象(persistentobject)形式向中间业务层提供服务。

1.3struts框架

sturts框架很好地实现了mvc设计模式的概念。它通过actionservlet对象实现集中控制,并利用struts—conifg.xml文件,很好地实现了视图、控制、模型层次之间的分离,使得页面设计与改变真正做到与代码无关。

2整合框架的web应用架构

如果以上述任何一个框架技术来实现大中型的web应用,会存在效率不高,解决问题不彻底等问题,通过以轻量级框架spring为核心,充分利用spring框架的开放性、模块化以及对业务对象、事务管理等强大的功能,整合sturts、hibernate框架,可以构造出五层web应用架构,分别为:客户层、web层、业务层、持久层、企业资源层5个层次。整合框架的web应用架构如图1所示:

在客户层,通过jsp页面实现交互,负责传送请求(request)和接受响应(response)。在web层,sturts根据actionservlet接受到的请求,委派相应的action。action对象中的execute方法调用模型中的业务组件,决定“做什么”。在业务层,管理业务组件的springioc容器负责向action提供业务模型(mode1)组件,决定“怎么做”和该组件的协作对象数据处理(dao)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件提升系统性能和保证数据完整性。业务层通过dao数据访问对象,向持久层请求数据处理。在持久层,依赖于hibernate的对象关系映射和对象化的查询语言操作,通过hibernate的会话,处理dao组件请求的数据,并返回处理结果。

对照基于ejb的一般web应用结构,整合框架的web应用架构中通过spring提供的轻量级业务组件的管理和ioc容器,实现了对ejb技术的替代和更好的组件重用性,使业务组件间的协作更加松耦合。同时利用spirng的开放性、模块化以及对hibernate良好支持的特点,通过引入专门的o/r映射框架hibernate实现了对关系数据库的对象化,隐藏了数据库的底层细节,便于开发者以统一的面向对象思想来开发应用。另外通过sturts的mvc模式,开发清晰明确的业务流程和用户交互,实现表现逻辑和业务逻辑的解耦,摆脱了原有的开发模式带来的高耦合性。通过框架的整合不仅集成了各种框架的优势,同时也构造了层次清晰,结构合理的5层web应用架构。

3应用实例

3.1项目概述

“宁波市城市公共信息服务平台”是由宁波市信息产业局牵头,以政府投资形式建设的一个公益性地信息服务平台。平台整合本地各类专业的信息服务企业和机构的信息资源,以合作的方式共同打一个宁波市本地的信息资源集聚中心和本地的信息门户,进而既增值开发利用了政府信息资源,也提了信息服务业的核心竞争能力,同时也为社会公众提供了一个权威的、统一的信息渠道,达到了政府、业、公众共赢的局面。

本平台整合了与社会公众有关的衣、食、住、行等政府、企业信息。信息分基本信息和市场商业信息两类。对于基本信息,平台的管理员及加盟企业所有成员都能进行信息的维护和更新,并有专门的信息员进行审核和管理,保持平台基本信息的准确与及时性。对于商业信息,基本上由者负责为原则,平台提供一种免费的平台,同时对这些的信息给予地图定位以及与其它频道信息等关联的增值服务,进一步提升第三方网站的信息价值。根据本平台的用户角色区分,主要有:前端普通用户和后台管理用户。后台管理用户有4种,分别是系统管理员、频道运作单位、加盟企业、信息员,主要负责对信息的采集与。前端用户是指一般的网站浏览用户,前端普通用户可以按分类信息查询,也可以按搜索引擎方式查询,在查到文本信息的同时给出对应的gis信息,进而可以获得行车路线等有关地图位置信息。另外,如用户根据本平台查到的信息,想进一步进行电子商务操作,如网上购物、电子订票等,本平台可以负责直接转向,起了一个信息门户的作用。

3.3主要实现技术

本平台采用tomcat5.0作为web服务器,struts框架为1.2版本,spring框架为1.2.5版,hiber—nate框架为3.0版,根据上述整合框架的web应用架构来实现平台的结构。

3.3.1视图层页面设计:根据前端用户灵活的信息浏览需求,同时又要适应频道运作单位自己管理频道模块的需求,因此,页面设计改动不能影响到其它业务逻辑。在实现中通过sturts的自定义标签,结合mvc模式,实现页面与业务逻辑分离,做到jsp页面不包含java代码。另外,利用jsp技术在显示页面嵌入地图内容,实现图文并茂的显示方式。

3.3.2web层请求响应控制:通过struts—conifg.xml配置文件把后台用户管理页面或前台用户浏览页面都对应到每个action,当页面发出请求后,根据struts—config.xml的配置文件中对应的action部署,由action对象调用本平台内的业务层组件。如果此时请求的是地图信息那么action对象中以ap/方式向市规划局的gis平俞调用地图位置信息,并把结果返回给客户端。如果此时请求是进一步需要第方电子商务服务,那么直接重定向到第方电子商务服务网站。

3.3.3业务对象的ioc方式管理:web层的action只是决定“做什么”,并没有实现“怎么做”,具体的业务逻辑由业务层的业务组件来完成。平龠中包括信息查询、会员注册、积分管理等功能模块都需要有一个业务组件来实现该功能。在项目实现中,把每一个业务组件包按接口类和实现类分开编码,当需要互相协作时,在代码层只要直接引用协作对象的接口类就可以了。协作对象的实现类统一南spring容器根据配置文件的说明进行注入。如:在本项目中,普通会员信息的业务需要信息员审核,审核通过后要把该信息的状态记录到某个频道运作单位下。那就可以分为i个服务组件:信息组件、信息审核组件、信息状态记录组件,在spring的ioc机制下,利用配置文件和基于接口与实现分离的编码方式可以很好地实现这个组件之间的松耦合协作,减轻了应用对容器的依赖。

3.3.4利用spring框架实现事务管理及与持久层会话:在本项目中对于会员注册,积分管理等操作需要进行事务管理,同时所有的操作数据保存需要与持久层进行连接,这些都可利用spring框架本身的功能来实现。如:通过spring配置文件可以直接实现数据源、会话工厂、事务管理和数据访问对象的配置,数据访问对象根据上述spring配置可以直接和持久层连接.这样在实现有中不用考虑这些功能的具体实现。hibernate通过转换工具把各类信息保存表转换成相应的对象文件和.xml映射文件,spring中的数据访问对象,直接对对象文件进行操作,由hibernate完成数据的持久化。

第10篇

关键词: MVC;党建系统;设计实现

Design And Implementation Of Party Construction System Based On MVC

An Ying-lin(Xingtai Tobacco Monopoly Bureau, Xingtai 054000, China)

Abstract This article briefly described MVC mode and detailed design and implementation of Xingtai Tobacco party construction system based on MVC mode. As the system used framework to simplify development, its development was more efficient. Using interface-oriented programming reduced the coupling between the layers. It maked party construction standardization andinformationization and met current requirements of Xingtai tobacco.

Key Words:MVC;Party Construction System ; Design And Implementation

引言

为了进一步加强和改进邢台烟草基层党组织工作,建立统一规范的基层党建工作体系,发挥基层党组织的战斗堡垒作用和广大党员的先锋模范作用,结合“二三五”教育实践活动和邢台市烟草行业标准化党建工作,采用信息系统实现党建工作标准化、信息化。

一、MVC模式概述

常见的面向对象设计模式有:Factory模式、Singleton模式、Facade模式和MVC架构模式[1]。MVC(Model-View-Controller)把一个应用程序的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用程序被分成模型层、视图层、控制层[2]。

MVC的请求处理流程(如下图1所示):首先客户端通过视图发起请求,然后控制器响应用户的请求,依据请求调用模型来进行处理。模型调用业务逻辑处理,用户的请求同时返回,最后控制器选择对应的视图返回处理的结果,并通过视图呈现给用户。另外,视图可以查询模型的状态,但不能改变,同时视图还可以接收模型的数据更新的状态改变事件。

图1 MVC设计模式

在JAVA应用的开发领域中设计模式很多,基于MVC设计模式的Java EE应用开发在实际企业级开发中逐步得到非常广泛的应用。Struts作为开源项目在不断的发展,已经成为MVC模式的首选框架。

二、党建系统功能

1.党建系统分为公告、学习交流、党建动态、基层党建、行业新闻、党建知识、学习资料、心得体会、专题学习、图片新闻、标准化党建、党风廉政等栏目。

2.党建系统信息以支部为单位进行维护,各支部党员要在党建系统内“基层党建”、“学习交流”、“心得体会”栏目上刊登信息,支部管理员在“标准化党建”模块“”落实、发展党员情况、板报更新、党政学习安排等信息。每个支部需设立支部管理人员具体负责本支部内党建信息、宣传报道等内容的审核和维护。其它的信息专栏由政工科人员刊登,政工科长审批。所刊登信息需由支部书记审批,最后由机关党委审批方可。

3.实现对各支部党建工作量化考核。在量化考核设计过程中,应注意定性与定量指标相结合,日常监督与考核相结合,党组织和党员考评相结合。以评促建,通过党建工作量化考核,切实提高党支部整体工作水平,促进党的基层组织建设走向规范化、制度化。

三、党建系统设计

1.系统总体架构

本系统遵守Java EE应用的分层模型,从整体上可分为:视图层、控制器层、业务逻辑层、DAO层、数据持久层(如下图2所示)。其中使用Struts作为系统的整体基础架构,负责实现MVC分离功能; Hibernate负责持久化操作,屏蔽对数据库操作细节;业务逻辑层和DAO层采用Spring框架,Spring提供Spring容器为用户设置对象间的依赖关系。

第一层是视图层,用于与用户交互,完成客户端的数据校验,接受用户请求、显示处理后的结果等,相当于MVC模式中的视图。

第二层是控制器层,用于处理用户请求的转发、调用业务逻辑层组件,相当于MVC模式中的控制器,主要采用Struts框架提供一个核心控制器ActionServlet拦截用户所有的请求。

图2 系统总体架构

第三层是业务逻辑层:该层接受来自控制器的请求,并基于请求处理业务逻辑。向下正面封装和调用DAO组件。这一层采用Spring作为核心,也是整个系统框架的核心。

第四层是DAO层:该层封装了运用Hibernate框架,对POJO进行持久化的操作。主要向上提供数据访问、持久化等功能,向下与数据库系统交互。

第四层是持久层:采用Hibernate框架提供的对象关系映射(Object Rational Mapping,缩写ORM)功能实现在JDBC层之上提供更好的封装,完成持久化类和数据库表的之间的映射,从而以面向对象的方式操作数据库。

2.系统各模块设计

依据功能将系统分为多个子模块,分别为:系统管理子模块、登陆子模块、信息子模块和考核子模块。系统管理子模块、登陆子模块、信息子模块、考核子模块如图3所示.

图3 系统主要子模块

四、党建系统实现

1.系统总体实现

三个框架的整合以Spring为核心进行整合,Spring的应用以IOC(Inversion of Control)容器为基础,必须首先引入Spring容器。本文采用直接web.xml中引入Spring容器,比Struts先引入。然后引入MVC的核心Struts框架加载。使用Struts作为MVC分离框架,客户端的HTTP请求经过ActionServlet转向对应的Action。为了实现转向的Action是Spring 容器中Action,在struts-config.xml加入Spring提供的类DelegatingRequestProcessor,在struts-config.xml控制器改为如下代码:

最后,引入Hibernate。Hibernate由Spring容器加载hibernate.cfg.xml配置信息,通过classpath路径来加载该配置文件。这样将Hibernate连接属性集中管理,有利于模块化管理,使Spring配置简洁,方便后期的维护。

2. 系统各层组件交互的过程

系统各层组件交互的具体过程如下:用户请求通过JSP页面发给Struts的控制器ActionServlet,之后ActionServlet经过Spring框架提供的DelegatingRequestProcessor类转发给Spring的Action组件,然后Action调用Spring容器中的Bean处理业务逻辑,通过调用DAO组件完成对持久层的访问并返回处理结果。业务逻辑组件将处理结果返回Action组件,Action返回ActionForward给ActionServlet,最后由ActionServlet将显示结果给JSP页面的用户。本系统详细的各层之间的交互如下图4所示。

图4系统各组件交互的顺序图

3.各层类之间的关系

各层类之间的关系:控制器层类依赖业务逻辑层类,业务逻辑层依赖各个DAO实现类,控制器与业务逻辑、业务逻辑与DAO之间的依赖层次是接口,都面向接口编程,他们之间的依赖关系如图5所示。

图5 各层之间依赖关系

五、结束语

总之,基于MVC的党建系统利用Struts框架实现了MVC分离,采用多层结构符合软件工程化管理。同时面向接口的编程,降低了各层之间的耦合。采用框架技术简化了软件开发,提高了开发效率。该系统符合邢台烟草党建工作需要,实现党建工作标准化、信息化,促进基层党建工作的水平的提高。

参考文献

石志国. JSP网络开发详解. 电子工业出版社, 2007.8

李刚. 轻量级J2EE企业应用实战:Struts Spring Hibernate整合开发. 电子工业出版社, 2007.4

第11篇

关键词:web应用 Spring Security 安全 访问控制

0 引言

Web应用作为一种开放式的服务平台,其无时无刻不在面临非法访问者的访问或者攻击,同时也面临内部用户的非法操作,使得存储在Web应用中的数据时刻可能被窃取和破坏的危险。这就需要我们提供一定的安全控制规则来确保Web应用的安全。然而在系统实施Web应用安全控制的时候,主要有:基于Web容器的安全认证。基于第三方插件的安全认证。独立开发的安全认证。对于第一种方式,它是传统的安全认证方式,对具体的Web服务器依赖强,移植代价高。对于第二种方式,不依赖具体的Web服务器,灵活性强,但受自身功能限制,因此,插件选取很关键。对于第三种方式,其将代码耦合到相应的业务逻辑中,增加维护的难度,降低了开发效率,不便调试。从灵活性、易用性、功能和投入等方面考虑,第二种方式是一种比较理想的方式。如在J2EE平台比较流行的开源框架Spring Security,其提供了描述性安全访问控制解决方案。本文通过对Spring Security安全框架的工作原理进行简单的剖析并展示如何将Spring Security安全框架应用到我们具体的Web应用中。

1 Spring Security简介

如引言所阐述的,Web应用的安全控制主要包括外部和内部两个方面。在安全控制的时候需要从以下几个方面考虑:能够认证合法的用户、能够对Web 请求进行安全保护、能够对业务层面的方法进行安全保护、能够做到对实体级别的保护等四个方面,而这四方面概括起来则分为两部分用户认证和用户授权。用户认证是指证某个用户是否为系统中的合法主体,即用户是否能够访问该Web应用,用户认证一般通过验证用户名和密码来完成认证。用户授权指的是验证用户在访问过程中是否有权限执行某个操作。

Spring是一款轻量级的开源框架,采用Java语言实现的[1]。Spring Security是基于Spring的安全框架,其充分运用了Spring中的依赖注入(DI,Dependency Injection)和面向切面(AOP ,Aspect Oriented Programming)技术,使得开发者可以通过XML配置文件以无侵入式的方式快速的将其部署到已有或者新的Web应用中。它提供了认证、授权、访问控制、会话管理等多种功能,用于加强任何Java应用的安全,但最常用于基于Web的应用。在Web安全控制的两个部分,Spring Security分别提供了多种实现方式。在用户认证部分,Spring Security提供了包括HTTP基本认证、HTTP表单认证、HTTP摘要认证、OpenId和LDAP等主流的认证方式。在用户授权部分,Spring Security提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以实现领域对象的细粒度控制[2]。

1.1 Spring Security原理

Spring Security 框架的主要组成部分是: 安全、认证管理、访问决策管理、运行身份管理和调用后管理等[3]。其对访问对象的整体控制流程框架如图1所示:

图1 Spring Security访问控制流程框架

(1)安全

安全的主要作用是拦截所用用户的请求,并协调其他安全管理器实现安全控制。它的配置方式是在Web.xml中配置DelegatingFilterProxy实例,DelegatingFilterProxy负责的是将HTTP请求委派给实现java.util.logging.Filter接口的Spring Bean。

(2)认证管理

确定用户的身份和凭证。其配置是在Spring Security提供的XML标签中配置,为认证配置相应的认证方式,同时在配置中为认证方式配置认证的凭证。

(3)访问控制决策管理

关于是否允许用户访问应用中的一个资源做决策。它的工作原理是通过访问控制决策管理器中的投票者对访问控制决策投票,投票者可以投票赞成授权、弃权或者拒绝访问资源。

(4)运行时身份管理

确人当前的主体和凭证的授权在保护资源的权限变化适应。

(5)调用后管理

确认主体和凭证的权限是否被允许查看保护的资源返回的数据。

2 Spring Security在应用中的部署和环境的设置

如Spring Security的简介所述,Spring Security是基于Spring的安全框架,所以在部署Spring Security之前一定要确保Spring框架环境已经设置好以及Spring Security的jar已经部署到lib中。

2.1 在web.xml中配置安全:

springSecurityFilterChain

org.springframework.web.filter.DelegatingFilterProxy

springSecurityFilterChain

/*

同时为Spring Security安全控制指定其配置文件,虽然我们可以将Web和服务层配置以及安全配置文件配置到同一个配置文件中,但是将安全配置分离到一个单独的文件(如spring-security.xml)做法更好,易于维护[2]。在web.xml中指定安全配置文件位置,让ContextLoaderLister在启动时加载该文件。

contextConfigLocation

...

/WEB-INF/spring-security.xml

2.2 认证管理的配置

2.2.1HTTP安全配置

authentication-failure-url="/login.jsp?error=true"/>

这里我们为认证管理配置了基于表单的认证方式,其中login-page、defaulet-target-url和authentication-failure-url这三个属性分别指定了默认的登入界面、登陆成功跳转的页面和登陆失败后跳转的页面,其中login.jsp必须使用Spring Security专有的表单操作URL和输入字段名称,当然也可以不用配置这三个属性,因为Spring Security已经默认为我们提供了,这也就是为什么login.jsp中必须包含Spring Security专有的表单操作URL和输入字段名称。这里我们也可以配置其他的认证方式如HTTP基本验证,其和表单认证同时启用时会采用后者。atuo-config="true"表示自动配置典型的web应用安全需要的基本安全服务,如intercept-url,将访问属性与用户的权限比较,确定用户可以访问相应的URL。

2.2.2验证器配置:

默认情况下,Spring security是采用如下SQL语句查询用户细节和权限:

select username,password,enabled from users where username=?

select username,authority from authorities where username=?

为了让Spring Security用这些语句查询用户细节,我们必须在数据库中创建对应的表。但往往当我们把Spring Security部署到我们的Web应用中,用户细节信息已经存在数据库了,此时通过自定义的SQL语句查询遗留数据库中的用户细节:

users-by-username-query="select user.username,user.password,user.usable as enabled from user where user.username=?" Authorities-by-username-query="

select user.username,user_role.role as authority from user ,user_role

where user.username=? and user.username=user_role.role"/>

同时我们也可以在认证管理器中为数据库配置相应的加密算法,目前应用最广的加密算法的是MD5加密。

2.3 访问控制决策管理配置

在Spring Security中,其默认为提供三种基于投票的访问决策管理器,分别为AffirmativeBased:至少一个投票者投票赞成授予权限、ConsensusBased:投票者一致赞成授予权限和UnanimousBased:所有投票者赞成或者弃权(没有拒绝访问的投票者)。默认情况下,如果我们没有指定访问决策管理器,则Spring Security自动配置一个AffirmativeBased访问控制管理器,其包含了两个投票者:RoleVoter和AuthenticatedVoter。其中RoleVoter根据用户角色对访问控制决策投票,其只处理以ROLE_前缀开始的访问属性,当然我们也可以定制的。AuthenticatedVoter则是根据用户验证级别对控制决策投票。但是有时这个访问决策管理器并不能满足我们的需求,此时我们可以自己创建相应的管理器,往往多数情况下,我们只需要自定义一个投票者,投票者需要实现AccessDecisionVoter接口即可,并在投票者中指定只对如IP_前缀开始的访问属性投票,然后将投票者部署到访问决策管理器中。如

class="org.springframework.security.vote.AffirmativeBased">

最后把这个访问决策管理器指定给配置元素。

以上的配置都只是加强了URL的访问控制,有时我们需要更深层次的访问控制。例如,对方法上的细粒度安全控制或者对领域对象的安全控制。在Spring Security 其通过Spring Aop引入切入点和切面逻辑为方法调用的拦截提供了支持。其对方法保护配置如下:

access-decision-manager-ref="accessDecisionManager">

expression="execution(* *.*Service.list*(..))" />

其中accessDecisionManager是自定义的访问控制决策器,并定义了具有角色ROLE_USER,ROLE_GUEST用户才可以调用服务层的list等方法。

在对领域对象的安全控制时,Spring Security 提供了对访问控制列表的支持,可以很方便地对不同的领域对象的不同角色设置不同的访问属性[4]。访问控制列表的实现中有3 个重要的概念,对应于4张数据库表。

(1) 授权的主体:即系统中的用户,通过用户实体对象来分配系统功能的授权,它是由ACL_SID 实体对象来表示的。

(2) 领域对象:表示需要进行访问控制的实体对象,可以说需要权限控制的功能实现对象需要在这里进行注册,它由ACL_CLASS 和ACL_OBJECT_IDENTITY 两个对象来表示,前者保存实体实现时所对应的Java类名,后者保存的是实体对象本身。

(3) 访问权限:表示一个用户对一个系统功能对象所具有的操作权限。由ACL_ENTRY 对象来表示,ACL中预定义了5种基本权限的常量:read(读)、write(写)、create(写)、delete(删除)和administration(管理)。访问控制列表服务的配置:

class="org.springframework.security.acls.jdbc.JdbcMutableAclService">

//数据源指定

//数据库的查找策略

//ACL缓存

//功能实现类标识查询

//功能权限标识查询

访问控制列表的实现:

ACL 提供了注解的支持,只须通过注解注入校验方法,就可以在功能执行前进行权限校验。如:

//标示方法的操作权限是ADMIN 级别,只有ADMIN 角色的用户才能操作当前方法

@ PreAuthorize( "hasRole( 'ROLE_ADMIN') or

hasPermission( id,com.ewcmscore.site.model.File,’ADMIN’)")

3 结束语

本文通过示例代码展示了将Spring Security部署到我们的web应用中,Spring Security安全框架通过XML文件配置为web应用提供了强大的安全保护,其不仅可以实现URL的访问控制,而且还可以实现类方法级别和领域对象级别上的安全保护,对web应用的安全控制实施有一定的参考价值。

参考文献:

[1]黄睿著.Spring 深度整合指南.[M]. 北京:电子工业出版社,2007. 1.

[2][美]Gary Mark Josh Long Daniel Rubio著,陈宗恒 姚军 将亮译 .Spring 攻略. [M]. 北京:人民邮电出版社,2012.3.

第12篇

【关键词】调频发射台;点播系统;解决方案;校园应用

【中图分类号】G40-057 【文献标识码】A 【论文编号】1009―8097(2013)04―0068―04

引言

校园调频发射台由小功率无线调频广播发射机、馈电系统、发射天线构成。具有音响效果好、覆盖面积大,成本低、使用便捷等特点,在学校教学、管理和校园文化生活中发挥了重要的作用。为便于管理、提高效率,针对调频发射台在实际使用中存在的需要专人管理节目播放等问题,根据学校实际情况,设计开发了调频发射台点播系统,系统结构模型如图1所示。

调频发射台点播系统采用Flex和Java技术实现。Flex是RIA领域的佼佼者,具备强大的UI渲染能力。Flex技术在表现力、交互性、跨平台性以及与应用服务器的通信方面均超越了其他RIA(如Ajax等)技术。基于S2SH(Struts2-Spring-Hibernate)框架的JavaEE应用已经得到广泛应用。参考JavaEE的S2SH架构,考虑到Flex与Struts2在功能上重合,采用Flex代替Struts2,本文采用Flex和Java组合应用的整合架构方案,即由Flex框架承担展现层逻辑的工作,Spring框架用来构建业务逻辑层,Hibernate框架用来建立持久层完成数据存取的工作。将三者进行整合,保证了应用系统的运行效率与可维护性。

一 相关技术原理

1 Flex技术

Flex能轻松快速地构建界面友好直观,用户方便易用,而且可以脱机使用和强大高效的应用程序。

Flex是高效率的开放源码框架。它提供了更加简洁的组件开发机制,能快速构建新的组件。

Flex及其框架使用了一套产生、广播、处理事件的机制,被传递的信息都是以事件流的方式处理。Flex中的事件触发机制基于观察者模式来实现的。

Flex使用数据绑定技术,当数据源对象的数据发生变化时,目标对象的数据会自动更新,不需要再编写代码去强制更新。

Flex使用共享对象在客户端或服务器端保存一些特定的数据,然后在多个客户端swf文件和对象之间实现数据共享。

2 JavaEE的Spdng与Hibernate框架

轻量级JavaEE中的Spring和Hibernate两种框架技术在当今各自的领域中都是应用广泛而且成熟的技术,它们针对特定领域开发都提供了很好的解决方案。

在Hibernate与spring的整合框架中,Spring充当了一个JavaBean容器的作用,Spring使用IOC和AOP技术接管了Hibernate的DAO、事务和Service业务层,从而能充分地管理事务和Request请求。经过IOC容器的处理后,针对面向接口的编程使软件项目的分层更明确。

由Spring统一管理Hibernate,Spring提供注入Hibernate所需要的基础资源。此时,Spring接管如下内容:Hibernate创建SessionFactory必需的DataSource,执行持久化必需的Session和访问持久层必需的事务控制等,而不需通过代码进行控制:SessionFactory和TransactionManager作为Spring容器中的bean,这些bean放在applicationContext.xml配置文件中管理,而把数据库连接的内容放在hibemate.cfg.xml配置文件中来管理。这样可为系统提供很好的解耦。

Spring对Hibernate的DAO进行了非常好的封装,使开发者完全不必关注于事务,可以把精力更多地集中在业务处理方面。继承HibemateDaoSupport的DAO类具有Spring封装Hibernate操作数据库的完全功能,

继承HibemateDaoSupport的目的是让Spring管理事务,DAO具有面向编程接口的特点,多态性使DAO类的实现多样化。在Spring管理下,数据库操作、事务处理也都变成自动化了。

二 系统设计

1系统总体架构设计

在Flex和Java的应用中,“展现层”逻辑完全运行在客户端的Flash虚拟机中,而“业务逻辑层”和“数据持久层”逻辑则运行在服务器端的Java虚拟机中。客户端系统和服务器端系统完全分离,各自运行在不同的CPU和虚拟机中。因此,Flex和Java组合开发的应用系统为异构的分布式系统。

Flex和Java应用的系统架构图如图2所示。

展现层利用Flex框架技术,可以实现显示与逻辑的分离,代码清晰易读性及可维护性高。

Spring负责业务逻辑层,通过Spring配置文件定义应用程序的业务逻辑,实现应用程序逻辑与代码的分离。

Hibernate数据持久层简化了数据库操作,节约了开发人员编写大量的SQL语句所花费的时间,缩短了软件开发周期。

2 数据库设计

根据业务需求和功能逻辑分析,确定调频发射台点播系统采用以下数据表:用户表(Users)、媒体节目表(Mediafile)、点播预约表(Playreservation)、固定节目表(Fixedschedule)、公告通知表(Announcement)、用户日志表(Userlog)。其中部分数据表之间包含相关关系。

用户表存放用户的详细信息,其中字段包括用户标识、用户名、用户口令、用户权限等级、用户实名、工号(学号)、身份证号、部门、邮件地址、用户类别、注册时间、注册IP地址、注册MAC地址、手机号、固定电话、是否锁定、性别、地址、登录次数等信息。用户权限等级设定如下:超级管理员为1,普通管理员为2,普通用户为3,广播发射用户为4。

媒体节目表存放媒体节目的详细信息,其中字段包括节目标识、节目名称、节目类别、节目简介、节目文件名、节日时长、上传用户标识、上传时间、文件大小、存放路径、是否审核、审核人标识、浏览次数、点播次数、播放次数等。

点播预约表存放节目被点播的有关信息,其中字段包括点播标识、点播用户标识、点播节目标识、操作时间、预约播放时间、节目时长、点播级别、点播结果等信息。

固定节目表存放管理员的固定或特殊播放节目的信息,其中字段包括固定()节目标识、人标识、节目标识、操作时间、播放时间、节目时长等信息。

用户日志表存放权限用户(包括普通用户及管理员)的登录、注销等信息,还存放管理员一些关键操作的日志信息。

公告通知表存放由管理员的一些通知公告信息。

3 系统功能模块设计

本系统分为五大功能模块,如图3所示。

(1)登录模块:普通用户和管理员可利用用户名或密码登录系统,通过验证方可进入系统;匿名用户直接点“匿名登录”即可,不用经过验证。

(2)节目上传模块:普通用户及管理员用户均可上传节目(只能上传mp3格式的声音文件)。节目上传以后,必须等待管理员经视听审核方可被点播。匿名用户不能上传节目。

(3)点播节目模块:所有进入系统的用户(包括匿名用户)可以根据已有节目列表来点播节目。点播策略为:正在广播的节目不能中断:管理员可以节目(一般为固定和特殊节目),权限最高,普通用户次之,匿名用户最低;点播时间冲突时,权限高的用户可以点播成功,权限低的用户点播的节目被取消。

(4)广播节目模块:单独设定广播发射用户,在发射机所在客户机上登录系统,此时客户机的声卡输出即作为调频发射机的音频源。根据服务器数据库中点播表的播放时间,采用定时器方式来定时播放节目。系统轮询点播节目表,轮询时间间隔可根据实际情况设定为2秒或5秒等。一般每个校区设置有一台发射机。由于采用定时器,发射机之间可实现同步。无点播节目(可定义为距下一个点播节目时间长度大于某个时间间隔,如10秒)时,可从节目表中随机选择节目来广播,直至点播节目播放时间点到来为止。

(5)管理模块:包含几个管理子模块,如:用户管理子模块、节目管理子模块、点播管理子模块、日志管理子模块、公告管理子模块等,为管理员提供对各种资源(或对象)进行增删改查等管理功能。

三系统相关问题研究及实现

1 Flex客户端和Java服务器端之间的通信

本系统中,客户端和服务器端的通信(远程过程调用,即RPC)采用HTFP协议。大量数据通信时是采用RemoteObject组件完成的,使用AMF(Action Message Format)格式交换数据,同时需要采用第三方框架配合。AMF是Adobe公司定义的一种二进制数据格式,其数据转换和传输效率更高,第三方框架用于解释AMF格式数据。

在Java平台下,本系统第三方框架采用Adobe官方开源软件BlazeDS,安装配置在服务器端。

2 Flex客户端和Java服务器端的整合

由图2可知,Flex客户端与Java服务器端整合的关键就是Flex与Spring的整合。

Flex与Spring的整合需要一个工厂类SpringFaetory,负责为Flex目的文件提供已经完成初始化(依赖注入)的Springbeans实例。

在BlazeDS的services-config.xml文件中添加factory元素,指向该工厂。

在应用中,services-config.xml文件有如下配置:

class="cn.edu.ahut,fmrs.flex_spring.Spring Factory"/>

此外需要配置BlazeDS的remoting-config.xml文件,该文件定义各个目的文件元素,指定Spring工厂以及对应的业务层服务组件bean的id。

如对媒体节目来说,remoting-config.xml文件有如下配置:

spring

mediafileAction

这样,通过BlazeDS,Flex客户端就可以实现通过远程方法调用的方式访问服务器端Spring提供的组件服务。

3异构系统之间远程数据的请求与调用

Flex客户端使用RomoteObjecct对象通过BlazeDS框架调用服务器端的Remote Facade对象中的方法,Remote Facade对象方法则调用“业务逻辑层”中“业务逻辑对象”或“业务逻辑服务对象”的方法完成客户端请求。此为远程外观(Remote Facade)模式,是客户端和服务器端的接口。

“DTO/VO模式用于远程方法调用过程中的传输数据,DTO(服务器传输对象)是服务器端普通Java对象,它不承担任何业务逻辑;VO(值对象)是客户端ActionScript对象,它只承担数据,不含任何业务界面逻辑;DTO与VO――对应,成对出现”。

在客户端与服务器端的通信过程中,VO和DTO两种对象通过远程方法调用,经过BlazeDS框架对两种对象进行相互转换,完成异构系统之间数据的请求与调用。

以删除媒体文件处理为例,客户端在进行有关配置后,采用MediafileAction.deletemediafile(mediafile)语句来调用服务器端的deletemediafile(Mediafile mediafile)方法来删除媒体文件;前者语句中的参数mediafile即为客户端VO对象,后者方法中的参数mediafile即为服务器端VTO对象。

4 系统权限管理的实现

(1)权限用户登录成功后,能获取到用户权限等级,等级为1至4级。匿名用户登录后,用户权限等级设为5。

(2)登录用户通过菜单导航条可以进入不同功能菜单。菜单导航条通过MenuBar、XMLList、State等组件实现。MenuBar是菜单组件;XMLList组件提供数据集,数据集表示菜单的具体项和子项;单击每个菜单项都跳转至相应的状态(或页面),不同的状态由State组件提供。

根据登录用户的用户权限等级进入到不同的状态,也即进入到不同的(子)菜单,即拥有了不同权限。

为提高程序的可重用性,采用对某个状态(或页面)移除或增加部分组件来实现。

(3)采用Flex共享对象在本地保存用户登录信息,用户注销时,清除本地共享对象。

5 发射客户端广播的实现

采用Flex 4系统Sound类的play方法播放服务器上的rap3格式文件,使发射客户端声卡发出声音,经过发射机后广播出去。采用Sound类的stop方法停止播放节目。

6 系统实现环境

调频发射台点播系统采用CentOS 5.5系统,Web服务器采用Tomcat 7.0,数据库采用MySQL 5.0,编程语言采用Java 6.0,开发框架采用Spring 3.0,Hibernate 3.3,Flex 4,BlazeDS 4.0。

Tomcat和MySQL部署在一台服务器上,发射客户端采用两台PC机,分别放置在两个校区,连接到各自的发射机上。

实际应用环境中,考虑到网络延迟产生的问题,两个发射机采用不同的频率发射广播。由于采用无人值守方式,发射客户端系统还考虑每天定时开机关机问题,以及在网络瞬间断开重连后播放模块的自动启动问题。

系统运行实际效果截图(局部)如图4所示。

相关文章