前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇spring框架范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
关键词 spring; J2EE; 控制反转; 事务处理
引 言
在软件开发中出现过各种各样的框架,开源软件的兴起,使得各种各样的框架纷纷出现,例如,Apache组织下就拥有诸多的框架类产品。框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。然而,传统的框架使得应用程序组件过分依赖于框架中的类,这种耦合度的提高降低了组件的复用性。Spring框架的出现,使得组件之间更松散的耦合成为了可能。
Spring框架简介
Spring框架是一个2003年2月才出现的开源项目,该开源项目起源自Rod Johnson在2002年末出版的《Expert One-on-One J2EE Design and Development》一书中的基础性代码。在该书中,Rod Johnson倡导J2EE实用主义的设计思想,而Spring框架正是这一思想的更全面和具体的实现。Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。作为一种轻量级的J2EE框架,Spring提供了一种有效的方式来建立和组织J2EE应用程序。
1、Spring特性
IoC(Inversion of Control;控制反转);又称DI(Dependency Injection;依赖注入);是面向对象领域新兴的编程思想;也是Spring的精髓所在。简单地说;IoC就是指程序之间的关系由容器来控制;而不是传统实现中由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码转到外部容器,控制权的转移,也就是所谓的反转。IoC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来。当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置数据提供给它。
Spring IoC,借助于依赖注入设计模式,使得开发者不用理会对象自身的生命周期极其关系,而且能够改善开发者对模式的使用。对于一个对象的管理不是什么困难,难就难在对整个对象群的管理。依赖注入可以让容器管理对象,即“Don’t call me, I will call you”。这样对象本身的生命周期以及对象之间的关系就不再让开发者费神了。
Spring AOP,借助于Spring实现拦截器,开发者能够实现以声名方式使用企业级服务,比如安全、事务服务。AOP 合理的补充了OOP,借助于Spring AOP,开发者能够高效的使用J2EE服务。
Spring服务抽象,借助于各种J2EE API抽象,使得开发者能够一致地使用J2EE 技术,而不管具体是使用什么J2EE API,借助于Spring服务抽象,使代码大大减少,满足“更少代码,更少BUG”的软件设计原则。
Spring IoC+Spring AOP+Spring服务抽象,一起形成Spring,这样一个有机体,使构建轻量级J2EE成为可能。
Spring提供的事务管理
Spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活方便。
1、传统使用JDBC的事务管理
以往使用JDBC进行数据操作,使用DataSource,从数据源中得到Connection,我们知道数据源是线程安全的,而连接不是线程安全的,所以对每个请求都是从数据源中重新取出一个连接。一般的数据源由容器进行管理,包括连接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等这些J2EE商业容器都提供了这个功能。
以往的我们使用JDBC在写代码时,事务管理可能会是这样:
Connection conn = null;
try{
conn = DBConnectionFactory.getConnection;
conn.setAutoCommit(false);
//do something
conn.commit(); //commit transcation
}catch(Exception e){
conn.rollback();
}
finally{
try{
conn.close();
} catch(SQLException se){ //do sth.}
//close ResultSet,PreparedStatement,Connection
//notice:Maybe ocurr Exception when u close rs,pstmt,conn
}
按照以往的思路来写代码,代码量比较长,而且容易疏忽,忘掉一些try/catch,引发一些异常无法catch,虽然有时候我们会写DBTool类,来关闭这些资源,并且保证在关闭这些资源时,不向外抛异常,但是这样做会导致额外的麻烦。
2、Spring提供的编程式的事务处理
Spring提供了几个关于事务处理的类:TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。
我们使用编程式的事务管理流程可能如下:
(1) 声明数据源。
(2) 声明一个事务管理类,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等
(3) 在我们的代码中加入事务处理代码:
TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try{
//do sth
transactionManager.commit(ts);
}catch(Exception e){transactionManager.rollback(ts);}
使用Spring提供的事务模板TransactionTemplate:
void add()
{
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}
TransactionTemplate也是为我们省去了部分事务提交、回滚代码;定义事务模板时,需注入事务管理对象。
3、Spring声明式事务处理
Spring声明式事务处理也主要使用了IoC,AOP思想,提供了TransactionInterceptor拦截器和常用的类TransactionProxyFactoryBean,可以直接对组件进行事务。
使用TransactionInterceptor的步骤:
(1)定义数据源,事务管理类
(2)定义事务拦截器,例如:
<bean id = "transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributeSource">
<value>
com.test.UserManager.*r=PROPAGATION_REQUIRED
</value>
</property>
</bean>
(3)为组件声明一个类:ProxyFactoryBean
<bean id="userManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><value>com.test.UserManager</value></property>
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
</list>
</property>
</bean>
使用TransactionProxyFactoryBean:
<bean id="userManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target"><ref local="userManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
TransactionProxyFactoryBean只是为组件的事务,如果我们要给组件添加一些业务方面的验证等,可以使用TransactionTemplate加拦截器方式,为组件添加多个拦截器,spring AOP中提供了三类Advice,即前增强,后增强,抛出异常时的增强,可以灵活使用。
关键词: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).
关键词:Struts;Spring;Hibernate;人力资源管理系统;依赖注入
中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)11-2637-03
Human Resource Management System Design and Implementation Based on Struts/Spring/Hibernate Integration Framework
HU Zhi-min
(Department of Information Engineering, Hunan Urban Construction College, Xiangtan 411100, China)
Abstract: Modern enterprise competition is the competition for talent, human resource management system can improve the efficiency of corporate talent management. Based on the Java EE platform, human resources management system has been designed, using Struts/Spring/Hibernate integration framework for the development of human resources management system, using the MVC pattern to the user interface and business logic completely separate, using dependency injection to improve the system components of the between independence. The use of Struts/Spring/Hibernate integration frameworks for information systems development, than the traditional multi-layer model has a higher flexibility and scalability.
Key words: struts; spring; hibernate; human resources management system; dependency injection
人力资源管理是知识经济时代企业管理的主要内容,“以人为本”突出了人在企业中的作用。随着市场竞争的日益激烈,企业竞争由外部竞争逐渐转变为全方位竞争,而人才的竞争更是企业竞争的焦点。
1998年前后,我国的很多大型企业都逐步认识到引才、用才、留才的重要性,于是,很多企业都先后设立了人力资源部。国内的一些高校也相继开设了人力资源管理专业。发展到现在,人力资源主要从事员工招聘选拔、绩效考核、薪酬福利管理、劳动关系协调等工作。而信息化人力资源的管理模式也由此脱颖而出。
同志指出:“人才问题是关系党和国家事业发展的关键问题。”;“国以人兴,政以才治,为政之道,要在得人”。新世纪、新阶段实施人才兴企战略,使人才越来越受到重视。[1]但是传统的人力资源管理方法已经不适应于信息时代的发展要求,在传统模式下,人力资源管理部门机构比较庞大,工作任务繁重,各种工作由于使用人工来操作极易出错。建立信息化的人力资源管理系统已经成为企业人力资源管理的首要任务。
根据企业人力资源管理需求,设计了基于Java EE的人力资源管理系统架构,采用Struts/Spring/Hibernate集成框架为基础进行了系统设计,采用MVC、依赖注入、过滤器等技术简化了系统开发,提高了系统的灵活性和可扩展性。
1 系统需求
为了提高企业信息化水平,促进企业管理的规范化、制度化、流程化,决定实施人力资源管理系统。希望通过这个系统的实施规范人事档案的管理,规范薪酬体系和薪酬发放的管理,规范人事的调动管理、培训管理和激励管理。并对招聘工作的职位、简历、面试、招聘题库、招聘考试、录用等环节加以规范。系统还需提供人事档案的导出和报表功能。
本系统将实现人力资源档案管理、薪酬管理、调动管理、培训管理、激励管理和招聘管理六大功能。其中人力资源档案管理是本系统的基础数据和核心内容。包含人力资源档案登记、人力资源档案登记复核、人力资源档案查询、人力资源档案变更和人力资源档案删除四个子模块。薪酬管理是系统中的一个重要部分,在系统管理模块设置薪酬标准项目后,进行薪酬发放登记。员工工作机构和职位发生变动的时候,通过调动管理执行登记员工调动档案,并登记其新的机构,职位和薪酬标准。通过培训管理进行教育培训档案的建立,修改和维护,培训信息等工作。激励管理主要信息包括获奖人员,奖惩时间、奖惩内容、奖金类别等信息,可以对每个员工奖惩信息进行增加、删除、编辑操作。招聘管理实现当某个岗位出现空缺的时候,或者随着公司业务发展,需要招聘新员工的时候,通过这个模块。后的职位可以进行修改。另外,需要提供职位查询的功能,查询已的职位,并对已的职位录入应聘者信息。
2 开发平台选择
2.1 Struts/Spring/Hibernate集成框架
Struts/Spring/Hibernate集成框架是Struts、Spring和Hibernate三种技术的有机融合,是目前应用最广泛的Java EE架构。在Struts/Spring/Hibernate集成框架中,Struts的作用是提供MVC模型,将界面、业务逻辑和数据分离,并提供一个高可扩展的架构。Spring作为依赖注入的容器,将项目中的构建进行粘结。而Hibernate提供了一个抽象的数据服务视图,将用户对数据库的访问进行高度抽象。[2]
Struts 是目前创建Web 应用最常用的表现层MVC 框架实现,是JakartaApache 的一个开源项目[3]。基于Model2 的Struts框架利用控制器和定制标签库将应用中的模型和视图分离,达到了层间松散耦合的效果,同时提高系统的灵活性、重用性和维护性。作为开源项目,Struts经受了大量实践的检验,功能越来越强大,体系也日臻完善,并且对其他技术和框架显示出良好的融合性。[4]
Spring由Rod Johnson创建,它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。
2.2数据库服务器(SQL Server 2005)
SQL Server 2005是微软具有里程碑意义的企业级数据库产品,它在企业级支持、商业智能应用、管理开发效率等方面有了显著的增强,是集数据管理与商业智能分析于一体的、极具前瞻性的下一代数据管理与分析平台。
SQL Server 2005基于SQL Server 2000的强大功能之上,提供了一个完整的数据管理和分析解决方案,它将会给不同规模的组织带来不同的帮助。采用SQL Server 2005作为人力资源管理系统的数据库,综合考虑了系统规模、吞吐量、支出成本以及技术适应性等方面。
2.3应用服务器(Tomcat)
Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。在人力资源管理系统中,采用Tomcat 5.5做为应用服务器。
3 系统设计
3.1 Action设计
Struts采用struts-config.xml来进行Action的配置,主页的Action配置如图1所示。
对应的xml编码如下:
3.2依赖注入设计
依赖注入由Spring进行管理,所有需要被注入的Bean,都在applicationContext.xml文件中进行配置,其中datasource Bean的配置如下:
net.sourceforge.jtds.jdbc.Driver
jdbc:jtds:sqlserver://localhost:1433/HR_DB
sa
123456
3
3
2
50
600
900
100
10
3.3 过滤器的应用
在系统开发过程中,需要解决Struts的中文支持问题,开始使用在Action中使用程序进行编码转换,但是随着Action数量的增多,这种方法不仅容易出错,而且浪费人力。为了提高开发速度,采用了过滤器的技术对中文编码进行支持,过滤器类由Spring直接提供,也可以由用户自己编写。过滤器在Web.xml文件中进行配置,配置如下:
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
GBK
forceEncoding
true
CharacterEncodingFilter
*.jsp
CharacterEncodingFilter
*.do
4 总结
在企业信息化建设的过程中,可以采用各种技术来构建系统,每种技术都有自己的适应范围。企业人力资源管理系统必须要适应企业的管理要求,而采用Struts/Spring/Hibernate集成框架可以提供一个高可配置和可扩展的系统,系统可以经过部分修改直接适应其他企业的需求,达到了软件重用的目的。
参考文献:
[1] 蔡琳.以科学发展观指导企业人力资源管理[J].经营管理者,2009(22):322.
[2] 杨海斌.基于SSH框架的高校网站群内容管理系统设计[J].软件导刊,2009,8(9):118-119.
关键词:Struts、Spring、整合
一、引言
Struts框架是Apache基金会Jakarta项目组的一个Open Source(开放源代码)项目,该框架由一组相互协作的类(组件)、Servlet以及标签库组成,是对传统MVC设计模式的一种实现和标准化,充分体现了MVC模式“分离显示逻辑和业务逻辑”的设计思想,是目前Java Web开放中广泛采用的技术。
Spring是由Rod Johnson创建的一个开源框架,目的是为了解决Java Web企业应用开发的复杂性。Spring提供了IoC(控制反转)、AOP(面向切面编程)、声明式事务等功能,提高了Java Web应用开发的效率和质量。更重要的是,Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate等)的直接支持。
虽然Spring本身可以作为一个MVC实现,但由于Struts在MVC方面的影响力,使得开发人员者更愿意将Struts整合到Spring中,而不是使用Spring MVC代替Struts。本文总结归纳了整合Struts和Spring的三种方法,并讨论了各自的优缺点。
二、整合struts和spring
1,使用ActionSupport类
(1)原理
当客户端发送http请求到控制器时,使用请求参数填充FormBean,并根据struts-config.xml的配置将请求转发给对应的Action,Action通过调用父类的getWebApplicationContext()方法获取ApplicationContext对象,在通过ApplicationContext对象从Spring容器中获取相关的JavaBean,通过Action处理后将处理结果会发给控制器,控制其根据struts-config,xml的配置将处理结果传回到客户端。
(2)用法
①在struts-config xml中配置插件,代码如下:
②创建A ction类,继承自ActionSupport或DispatchActionSupport;
③在Action中通过调用getWebApplicationcontext()方法获取ApplicationContext对象,然后调用ApplicationContext对象的getBean()方法从Spring容器中取出相应的对象。
(3)评价
这种技术很简单并且易于理解。但是,它将Struts动作与Sp ring框架耦合在一起。如果想替换掉Spring,那么就必须重写代码。同时,由于Struts动作不在Spring的控制之下,所以它不能获得SpringAOP的优势。当使用多重独立的Sp ring环境时,这种技术可能有用,但是在大多数情况下,这种方法不如另外两种方法合适。
2,使用DelegatingRequestProcessor类
(1)原理
客户端发送http请求到控制器ActionServlet,控制器将使用请求参数填充FormBean并根据Struts-config,xml的配置将请求转发给DelegatingResquestProcessor,DelegatingResquestProcessor根据Spring配置文件从web容器中提取ActionBean并调用相关的JavaBean,由ActionBean对请求进行处理,处理完毕后在转发给控制器,控制器再根据struts-config.xml的配置把将处理结果发挥给客户端。
(2)用法
①在struts-config.xml中配置插件,代码如下:
vaIue=”classpath applIcationContext.xmI”/>
②在struts-config.xml中增加如下节点:
DelegatingRequestProcessor”/>
③创建Action,并在spring配置文件ApplicationContext xml中对其进行注册。
(3)评价
这种方法使Struts动作并不知道它正被Spring管理,并且使我们能够利用Spring的动作管理框架的所有优点。由于Struts动作注意不到Spring的存在,所以我们不需要重写我们的Struts代码就可以使用其他控制反转容器来替换掉Spring。看来这种方法的确比第一种方法好,但还是存在着一些问题。如果我们使用一个不同的RequestProcessor,则需要手动整合Spring的DelegatingRequestProcessor。添加的代码会造成维护的麻烦并且将来会降低的应用程序的灵活性。
3,将StrutsAction管理委托给Spring框架
(1)原理
客户端发送http请求到控制器ActionServlet,控制器将使用请求参数填充FormBean,并根据struts-config.xmI的配置将请求转发给DelegatingActionProxy,DelegatingActionProxy根据请求信息从Spring容器中获取相应的Action并由Spring为其注入相关的JavaBean,请求经Action处理完毕后在转发给DelegatingActionProxy,DelegatingActionProxy在转发处理结果给控制器,控制器根据struts-config.xml的配置把将处理结果发挥给客户端。
(2)用法
①在Struts-config.xml中配置插件,代码如下:
value=classpath:applicationContext.xmI/>
②创建Action并将st ruts-config,xml中的Action节点的type更改为org.springframework.web.struts,DeIegatingActionProxy
③在Spring配置文件中注册ActionBean。
(3)评价
动作委托方法是这3种方法中最好的。Struts动作不了解Spring,不对代码作任何改变就可用于非Spring应用程序中。RequestProcessor的改变不会影响它,并且它可以利用SpringAOP特性的优点。
关键词:开源框架;客户关系;整合;SSH
中图分类号:TP315文献标识码:A文章编号:1009-3044(2012)03-0617-03
CRM Design and Implementation Based on Open Source Frameworks
ZHAO Yong-hui, DENG Wen-xin
(Zhejiang Guangsha College of Applied Construction Technology, Dongyang 22100, China)
Abstract: In this paper, three main open-source frameworks Struts, Spring and Hibernate based, integrated design of a common SSH open source framework and its application to customer relationship management system. Practical results show that the framework of the integrat? ed framework of their three full advantage of reducing the coupling between the layers, increase the system flexibility and scalability, with a high reference and promotion of practical value.
Key words: open-source framework; customer relationship; integration; SSH
随着全球一体化经济的到来和市场竞争越来越激烈,客户对企业要求越来越高,需求呈现多样化、个性化、差异化。在当前激烈的市场竞争环境下,市场的竞争已经从产品的竞争转向了客户资源的竞争[1]。因此,企业为了争取最多的客户,获得最大利润,就必须实施针对性的策略,进行“一对一营销”,CRM正是达到这一目的的一个好的工具[2]。
通过实施CRM,一方面有助于规范企业管理,实现企业管理与业务运作的信息化和自动化。另一方面有助于整合企业的客户资源,掌握客户资源,制定合理的发展战略和市场策略,提高企业竞争力。由此可见,通过实施CRM,既可以提高企业的工作效率和收益,同时能保持老客户和发展新客户,从而把握未来竞争的主动权[3]。
1系统框架设计
1.1 SSH的集成框架
SSH的集成框架通过整合Struts、Spring和Hiber? nate这三种框架,形成一种新的轻量型的J2EE架构,实现了MVC三层架构的软件开发模式,用这架构可以实现高内聚、低耦合、易维护的分布式应用程序。
系统从职责上分为3层:表示层、业务逻辑层和数据持久层[3]。其中表示层主要负责提供界面实现与用户的交互,采用Struts框架,实现了MVC的分离。业务逻辑层它管理着具体的业务对象和业务操作,采用Spring框架,Spring有成熟的事务管理和依赖注入机制,能很好整合Struts和Hibernate。数据持久层利用Hibernate框架完成数据持久化操作。其具体的架构图如图1所示。
图1 SSH架构图
1.2 SSH集成框架工作流程
首先JSP页面提交请求给Struts2的ActionServlet核心控制器,核心控制器根据配置文件Struts-config.xml找到相应的Action,然后调用业务处理需要使用的Spring的bean,Spring的bean中提供相应的Java EE服务,在bean中调用数据持久层的DAO对象进行数据库的操作,接着把操作结果数据返回给Action,最后由Action决定数据发回给相应的JSP页面。
2系统实现
2.1系统功能介绍
根据公司对客户管理的需要,该系统能把客户基本信息、联系人相关信息、交往记录和客户服务记录等信息,实现规范化管理并共享;能通过分析销售机会和客户开发过程的记录,为开发新客户提供帮助;系统能根据客户的信息和交往记录,在客户将要流失前及时告知销售人员,采取措施挽回客户。系统能提供相关报表给公司领导分析了解公司客户情况。
系统功能划分成了营销管理、客户管理、服务管理、统计报表、基础数据和权限管理等六个模块,系统功能设计如图2所示。
图2系统功能设计
2.2系统功能实现
客户关系管理系统以MyEclipse 7.0为开发工具,以Microsoft SQL Server 2005作为数据库,Web服务器服务器为Tomcat6.0,采用SSH集成框架开发。由于系统的模块较多,下面以一个以用户登录功能为例详细说明系统的开发实现过程,并将按照持久层、逻辑层、表示层和框架整合的顺序说明系统构建过程。
2.2.1持久层的实现
1)实现Hibernate建模
在Eclipse中运用HibernateTools从数据库中生成java持久化对象模型和hbm映射文件hibernate.cfg.xml,并且将它的路径添加到应用的类路径中完成Hibernate的配置,该配置文件由Hibernate用来连接到数据库、生成模式和获得其它特定数据库信息的属性组成[4]。
2)生成java持久化对象模型和hbm映射文件
使用Hibernate代码生成工具把数据库中的表映射为java类,列映射为java类的属性。同时,生成hibernate.hbm.xml文件,该文件实现对象和数据库之间的映射。
3)编写数据访问类通用DAO类接口:
public interface CommonDAO {
public List list(String sql);//查询方法
}
通用实现类CommonDAOHibImpl继承了HibernateDaoSupport类,实现了通用DAO类接口CommonDAO中的查询方法,代码如下:
public List list(String hql){ //查询方法
List ret = super.getHibernateTemplate().find(hql);
return ret;
}
2.2.2逻辑层的实现
逻辑层主要负责具体的业务逻辑处理、执行应用逻辑、执行向持久层的调用、获得从用户接口层的请求、处理事务和处理异常 等功能。这些功能由Spring的IOC、AOP应用、面向接口编程来实现,业务的管理采用spring配置的方式。
1)配置Spring上下文applicationContext.xml
该文件是整个框架的核心,Spring通过它实现程序中的依赖的关系并管理各组件,同时业务方法实现事务管理。在该文件中指出UserAction依赖于UserBiz,UserBiz依赖于CommonDAOHibImpl,CommonDAOHibImpl依赖于SessionFactory,SessionFactory依赖于DataSource,如图3所示。
图3各组件的依赖关系
2)业务逻辑代码
编写UserAction类和UserBiz类,2个类的实例都由Spring在运行期间“设值注入”方式动态注入。
2.2.3表现层的实现
利用Struts标签和Html语言建立用户登录的JSP文件,实现与用户的交互。用户通过登录页面输入登录信息,根据Struts的相关配置把登录请求转到Action处理。
2.2.4三个框架的整合实现
1) Spring与Hibernate整合实现
①在web.xml中配置spring监听器来启动Spring,配置contextConfigLocation参数为applicationContext.xml文件的路径和listen? er-class类为ContextLoaderListener。监听器通过初始化参数contextConfigLocation找到配置文件applicationContext.xml并加载Con? textLoaderListener。
②在applicationContext.xml文件中配置数据源和SessionFactory,使用Spring提供的LocalSessionFactoryBean,传入一个Hibernaet配置文件的配置。
2) Spring与Struts的整合实现
利用Struts框架开发的WEB应用程序,由控制器组件Action调用业务逻辑组件,业务逻辑组件由Spring IoC来管理,是通过Spring的DelegatingRequestProcessor截获页面层的请求来完成的[5]。
①在struts-config.xml配置插件
在struts-config.xml中配置Spring中的ContextLoaderPlugin类,把Spring配置文件的位置告知插件。
②修改Action Bean配置,在Struts配置文件中Action类别都配置为“org.springframework.web.struts.DelegatingRequestProcessor”,ActionServlet通过RequestProcessor来完成实际的请求转发。
③配置Struts中的Action,把Struts配置文件中配置Actionr的name改为id属性,name属性的值应与struts-config.xml中配置的Action的path属性的值相同,这样系统即会自动通过Spring来管理Action[5]。
3结束语
本文通过整合Struts、Spring、Hibernate三个开源框架,形成了SSH通用框构。实践证明,该框构充分发挥了Struts、Spring和Hi? bernate框架各自的优势,降低了各层间的耦合度,避免了许多重复性的工作,从而提高了开发的效率和系统的质量。通过应用这个通用框构开发的客户关系管理系统,在公司使用一年后,运行良好,公司比较满意,为该公司的客户管理做出了一定的贡献。
参考文献:
[1]陶红玉.基于WEB的客户关系管理系统的研究与实现[D].北京:华北电力大学,2009.
[2]杨帅.基于SSH的CRM系统的研究和设计[D].重庆:重庆交通大学,2009.
[3]王渊,怀自国,罗怡桂.基于Ext+Spring+Hibernate的Web系统开发架构的研究与应用[J].计算机与现代化,2009(12):78-81.