基于SSH框架的用户管理系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
栏目编辑:梁丽雯 E-mail:liven_01@
基于SSH框架的用户管理系统的设计与实现*
■ 中国人民银行金华市中心支行 贾俊华
一、项目背景
随着人民银行信息化建设的不断深入及应用系统数量迅速增加,应用系统数据分散、软件复用、标准化程度不高和系统建设重复投资等问题逐渐凸显。
为解决上述问题,并提高应用系统软件开发质量,人民银行科技司发布了《中国人民银行软件开发规范》,规定新建人民银行软件项目在技术路线选择上要使用Java EE架构和Domino架构,使用其他技术需说明原因。
但很多基层央行科技人员对上述架构没有相关开发经验,开发一个公共平台以便科技人员能快速开发一个满足地方特色需求的平台变得十分迫切。
针对这
摘要:
近年来,随着央行电子化程度的不断提高,基层央行对科技要求也越来越高,而最新的《中国人民银行软件开发规范》要求新建人民银行软件项目在技术路线选择上只能使用Java EE架构和Domino架构,但很多基层央行科技人员对上述架构没有相关开发经验。
鉴于此,笔者结合目前流行的开源框架SSH (Struts,Spring,Hibernate)开发用户管理系统,并从开发环境、系统数据库设计、数据持久层设计等方面进行论述。
此方案通过实际项目检测,具有复用性好、维护扩展方便等优点。
关键词:
SSH框架;软件开发规范;Java EE架构;用户管理一现状,人民银行金华市中心支行(以下简称“人行金华中支”)对Java EE架构和Web应用程序开发进行了研究,结合目前流行的开源框架SSH (Spring,Struts,Hibernate ),开发了用户管理系统,使得系统在重复利用、维护、移植、开发上得到一定的提高,极大降低了系统各层交互的耦合度,帮助基层央行节省搭建底层环境的时间。
二、Java EE架构介绍及SSH的整合
从整体上讲,Java EE是使用Java技术开发企业级应用的一种工业标准,它是Java技术不断适应和促进
作者简介: 贾俊华(1987-),男,浙江义乌人,工程师。
收稿日期: 2017-05-17
*本文仅代表作者个人观点,不代表作者所在单位意见。
栏目编辑:梁丽雯 E-mail:liven_01@
企业级应用过程中的产物。
Sun推出Java EE的目的是为了克服传统Client/Server模式的弊病,迎合Browser/Server架构的潮流,为应用Java技术开发服务器端应用提供一个平台独立、可移植、多用户、安全和基于标准的企业级平台,从而简化企业应用的开发、管理和部署。
由于Java EE不能够提供一个令人满意的应用程序编程模型,笔者这里利用开源组织提供的SSH框架来减轻开发人员的工作量。
系统从职责上分为4层:表示层、业务逻辑层、数据持久层和域模块层。
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。
具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java 对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑,系统框架如图1所示。
系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response ),然后Struts根据配置文件(struts.xml)将ActionServlet接收到的Request委派给相应的Action处理。
在业务逻辑层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO )组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统
性能和保证数据的完整性。
而在数据持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO 组件请求的数据,并返回处理结果。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与数据持久层的分离。
这样无论前端如何变化,域模型层只需很少的改动,并且数据库的变化也不会对前端有影响,大大提高了系统的可复用性。
而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
三、基于SSH框架的用户管理系统设计与实现
由于篇幅所限,下面将通过用户查询DEMO来展示如何进行基于SSH框架的Web应用开发。
该DEMO 将按照数据持久层、业务逻辑层、表示层的顺序说明系统构建过程。
(一)开发环境
系统采用B/S结构,以WebSphere Application Server 6.1作为应用服务器,DB29.1作为数据服务器,使用集成开发工具MyEclipse10,基于JSP技术进行网络应用程序的开发,使用DB2 Universal JDBC Driver Provider的type4连接方式创建数据源访问数据库。
(二)系统数据库设计
数据库设计是将数据库中的数据实体以及这些数据实体之间关系,进行规划和结构化的过程。
本DEMO根据需求分析涉及到用户表和机构表。
数据库两张表的结构见表1和表2所列。
图1 集成SSH框架的系统架构
域模块层Domain Model Business Objects
栏目编辑:梁丽雯 E-mail:liven_01@
(三)数据持久层设计
数据持久层由Java对象持久化类和数据访问对象(DAO)组成。
每个数据库表都对应着一个持久化对象,这样就给予了开发者使用OO思想设计和开发的便利,同时也屏蔽了具体的数据库和具体的数据表、字段,消除了对数据库操作的硬编码在重用性上的弊端。
相应代码如下:
@Entity
@T a b l e(n a m e="T_U S E R",s c h e m a ="T E S T",u n i q u e C o n s t r a i n t s=@ UniqueConstraint(columnNames = {
"USERNAME", "ORG_ID" })) public class User implements java.io.Serializable { private Integer id;
private String username;//用户名
private String userpwd;//密码
private Integer orgId;//机构ID
...
/** default constructor */
public User() {
}
/** minimal constructor */
public User(String username, String userpwd, Integer orgId) {
ername = username;
erpwd = userpwd;
Id = orgId;
}
/** full constructor */
p u b l i c U s e r(S t r i n g u s e r n a m e,S t r i n g userpwd,Integer orgId
, String name, String sex,...) {... }
// Property accessors
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "ID", unique = tr ue, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "USERNAME", nullable = false, length = 30)
public String getUsername() {
return ername;
}
public void setUsername(String username) {
ername = username;
}
表2 机构表设计
表名名称数据类型长度可空注释
T_GROUP
ID INTEGER4否主键NAME VARCHAR200否机构名称CODE VARCHAR50否机构代码BMSSTATUS VARCHAR10是机构状态ADDRESS VARCHAR200是地址
……
表1 用户表设计
表名名称数据类型长度可空注释
T_USER
ID INTEGER4否主键USERNAME VARCHAR30否用户名USERPWD VARCHAR100否密码HISTORYPWD VARCHAR100是历史密码ORG_ID INTEGER4否机构ID NAME VARCHAR30是姓名
……
栏目编辑:梁丽雯 E-mail:liven_01@
...
}
Hibernate通过映射文件将对象与关系型数据相关联,因此需要编写和数据库表相对应的Java持久化类以及对应的映射文件。
有了Java持久化类后就可以在此基础上实现数据访问类。
在Spring框架中,数据访问类可以从辅助类HibernateDaoSupport继承,这极大方便了Hibernate框架在Spring中的使用,相应的部分代码如下:
public class UserDao extends HibernateDaoSupport {
public List<User> findAll() {
return getHibernateTemplate().loadAll(User.class);
}
}
具体的Hibernate数据源、session工厂、事务管理、缓冲连接池等功能都由业务逻辑层的Spring容器提供。
(四)业务逻辑层设计
业务逻辑层由Spring框架支持,提供了处理业务逻辑的服务组件。
开发者需要对业务对象建模,抽象出业务模型并封装在Model组件中。
由于数据持久层实现了Java持久化类并且封装了数据访问对象(DAO),因此可以在Model组件中方便地调用DAO组件来存取数据。
Spring的IoC容器负责统一管理Model 组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。
在用户管理模块中,通过业务建模创建了用户模型UserService类,封装了对用户的权限管理以及角色管理等功能。
UserService类通过调用数据访问类UserDao实现对用户数据的操作。
这些组件的关系将通过配置Spring框架的applicationContext.xml联系起来,配置文件的主要内容如下:
<!-- Spring管理Struts2的Action -->
<bean id="UserDAO" class="erDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="UserService"
class=" erService">
<property name="userDAO">
<ref bean="UserDAO" />
</property>
</bean>
<bean name="UserAction" class=" XXX.web. erAction"
scope="prototype">
<property name="userService">
<ref bean="UserService" />
</property>
</bean>
<!-- WAS数据源配置 -->
<b e a n i d="d a t a S o u r c e"c l a s s="o r g. springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>jdbc/ XXXDemo</value></property>
</bean>
(五)表示层设计
表示层结合JSP和Struts的TagLib库处理显示功能,利用ActionServlet将请求(*.action)映射到相应的Action,并由Action调用业务逻辑的服务组件,然后根据处理结果跳转到Forword对象指定的响应页面。
业务流程的部署由struts.xml完成。
下面以一个用户信息显示的请求(userInfoList.action)为例来说明配置文件的使用。
JSP页面放置查询用户信息功能按钮,部分页面代码如下:
栏目编辑:梁丽雯 E-mail:liven_01@
<f o r m m e t h o d="p o s t"n a m e="f o r m1" action="userInfoList.action">
<input type="submit" class="button" value="查 询" />
</form>
JSP页面提交申请经过web.xml拦截后找到struts. xml中的对应方法,然后通过applicationContext.xml调用将查询结果返回在JSP页面中显示。
web.xml代码:
<filter>
<f ilter-name>struts2</f ilter-name> <f ilter-class>org.apache.struts2.dispatcher.FilterDispatcher</ filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts.xml代码:
<!-- 用户信息显示 -->
<a c t i o n n a m e="u s e r I n f o L i s t" class="UserAction" method=" userInfoList">
<result name="success">/main.jsp</result> </action>
userInfoList代码:
// 用户查询
public String userInfoList() throws Exception {
/**
* 获取查询结果, 返回结果包括用户集和记录数
*/
M a p<S t r i n g,O b j e c t>u s e r Re s u l t=n e w HashMap<String, Object>();// 用户信息hashmap
userResult = userService. findAll ();
S t r i n g c o u n t=u s e r R e s u l t.get("count").toString();
List<?> templist = (List<?>) userResult.get("list");
List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();// 用户信息集合M a p<S t r i n g,O b j e c t>u s e r=n e w HashMap<String, Object>();// 单个用户信息hashmap if (templist != null && templist.size() > 0) {
for (int i = 0; i < templist.size(); i++) {
User tempuser = (User) templist.get(i);
user.put("id", tempuser.getId());
user.put("username", tempuser.getUsername());
...
userList.add(user);
user = new HashMap<String, Object>();
}
}
userResult.put("count", count);
userResult.put("userList", userList);
r e q ue s t.s e t A t t r i but e("cou nt", u s e r Re s u l t. get("count").toString());
r e q u e s t.s e t A t t r i b u t e("u s e r s",u s e r Re s u l t. get("userList"));
...
return "success";
栏目编辑:梁丽雯 E-mail:liven_01@
} else {
// 找不到结果显示此信息
request.setAttribute("userquery", "2"); return "success";
}
}
main.jsp代码:
<table>
<tr>
<td>用户名</td>
<td>所属机构</td>
<td>用户状态</td>
</tr>
<s:iterator value="#ers" id="users"> <tr>
<td><s:property value="username" /></td> <td><s:property value="org" /></td>
<td><s:property value="userstatus" /></td> </tr>
</s:iterator>
</table>
四、总结
基于Java EE的Web应用以其层次性、平台无关性的优势已经逐渐成为了Java Web开发的主要解决方案。
本文以B/S结构为基础,采用WAS作为应用服务器,使用JNDI数据源技术访问数据库,针对传统的Java EE Web应用开发的弊端,提出了一种利用轻量级框架来快速搭建Web应用的解决方案,并且通过其在实际项目中的应用,证明了采用此方案可以帮助开发人员在短时间内建立结构清晰、复用性好、维护扩展方便的Web应用程序。
FTT
参考文献:
[1]周炬,马国胜.虚拟化技术在金融业的应用和安全分析[J].中国金融电脑,2013(3):51-57.
[2]钱继胜.基层央行业务终端桌面虚拟化应用前景分析[J].青海金融,2016(2):62-64.
[3]赵琳,高振江.虚拟桌面技术研究与应用[J].西安航空技术高等专科学校学报,2011(3):
74-75.。