16、ect>元素定义的存储与Application对象中的所有变量(以及它们的值)的一个集合。
作用域为Application(整个程序运行期)。
3.3.2 异步刷新网页方式
系统页面的异步刷新使用AJAX完成。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。也就是说可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。核心对象XMLHTTPRequest,通过这个可在不重载页面的情况与Web服务器交换数据。通过AJAX,因特网应用程序可以变得更完善,更友好[4]。
3
17、3.3 网页动态效果
前台网页的动态效果使用了jQuery,他是一个兼容多浏览器的javascript框架,jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用AJAX以及其他功能。除此之外,jQuery提供API让开发者编写插件。其模块化的使用方式使开发者可以很轻松的开发功能强大的静态或者动态网页[5]。
3.3.4网页框架介绍
(1)Struts框架
Struts框架具有组件的模块化,灵活性和重用性的优点,同时简化基于MVC的web应用程序的开发。
Struts可以清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序的过程
18、Struts提供的类使得开发工作更加简单,这些类包括:控制程序流程的类;实现和执行程序事务逻辑的类;自定义的标记库使得创建和验证HTML表单更加容易。
Struts框架中,模型分为两个部分,系统的内部状态与可以改变状态的操作。内部状态通常由一组ActionForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据。
(2)Hibernate介绍
Hibernate是一个开放源代码的对象关系映射框架,他对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象变成思维来操纵数据库。Hibernat
19、e可以应用在任何使用JDBC的场合,既可以在Java客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J233框架中取代CMP,完成数据持久化的重任。
(3)Spring介绍
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由E
20、JB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
3.4 使用软件及环境介绍
3.4.1MyEclipse 介绍
MyEclipse企业级工作平台(MyEclipseEnterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备
21、的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。
MyEclipse是一个十分优秀的用于开发Jaava,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX,JSP,JSF,Struts,Spring,Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。
3.4.2 MySQ
22、L
MySQL是最流行的关系型数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL使用的SQL语言是用于访问数据库的最常用标准化语言。SQL通常使用于数据库的通讯,ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用SQL的常见关系数据库管理系统有:Oracle、Sybase、Microsoft SQL Server、Access等等。虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自己的专有扩展功
23、能用于它们的系统[8]。但是,标准的SQL命令,比如“Select”、“Insert”、“Update”、“Delete”、“Create”和“Drop”常常被用于完成绝大多数数据库的操作。
SQL语言有着非常突出的优点,主要是:
(1)一体化:SQL集数据定义DDL、数据操纵DML和数据控制DCL于一体,可以完成数据库中的全部工作。
(2)使用方式灵活:它具有两种使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主语言中使用。
(3)非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,
24、而不需要告诉它“怎么做”。
(4)语言简洁,语法简单,好学好用:在ANSI标准中,只包含了94个英文单词,核心功能只用6个动词,语法接近英语口语[9]。
3.4.3 Java
Java是由sun公司与1995年5月退出的Java程序设计语言和Java平台(即JavaEE,JavaME,JavaSE)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制平台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群,在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
Java编程语言的风格十分接近C语言
25、C++语言。Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,舍弃了C语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧[10]。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译,到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java程序的性能[11]。
3.5数据流图
数据流图,即DFD图
26、Data Flow Diagram),是用于分析系统数据流程的图形,意在让用户理解系统的功能、输入、输出和数据存储等。网上文件管理系统的第一层数据流图如图3-2所示,描述系统由哪几部分组成,各部分之间有什么联系。数据流图如图3-2所示。
图3-2 文档管理系统的第一次层数据流图
3.6用例图
登陆
文档管理系统的用例图,用户用例图如图3-3所示。
Use
Use
上传文件
Use
下载文件
Use
Use
删除文件
用户
浏览文件
图3-3 用户用例图
管理员用例图如图3-4所示。
管理用户
Use
27、
Use
管理员登录
Use
管理文件
管理员
图3-4 管理员用例图
3.7系统子功能描述
(1)登录管理
参与者:用户和管理员
综述:登录网上文件管理系统。
描述:当注册用户进入登录界面,这是管理员和用户进入系统的唯一入口。如果用户没有通过身份验证,则将请求转发到消息页面,页面提示消息:登录失败,用户名和密码不匹配。当用户通过身份验证后,则转发到用户列表页面,上方指明当前登录的用户。
(2)文档管理
参与者:用户和管理员
综述:登录系统后对网上文档进行管理。
描述:当用户和管理员登录成功后,可以对自己上传
28、的文当进行编辑和删除操作;而且还可以上传新的文档。用户和管理员还可以设置文档的下载权限。
(3)用户管理
参与者:管理员
综述:对用户进行管理
描述:管理员登录系统后,可以对已有的某个用户进行编辑。管理员可以对用户可用的磁盘大小、目录开放限制和用户等级等进行重新设置;管理员还可以添加一个新的用户,对新用户同样进行上述操作。
(4)上传管理
参与者: 管理员和用户
综述:用户和管理员登录系统后,可以上传自己的文件到已有的磁盘空间中。
4 总体设计
4.1 系统流程图
4.1.1用户登录
用户登录首先需要用户输入各自的ID以及对
29、应的密码,并在数据库中进行验证,得到验证结果,验证结果为卡密对应则进入下一个阶段的操作,否则显示登录失败重新输入各自的ID以及对应的卡密。用户登录流程图如图4-2所示。
结束
开始
输入帐号密码
打开操作界面
连接数据库
否
卡密码对应否
是
图4-2 登录流程图
4.1.2 分级控制
系统由管理员设置用户拥有哪些权限,拥有不同权限的用户所能访问的内容也不相同,运行流程如图4-3。
登录
日志记录
输入帐号密码
判断是否管理员员
是
30、 否
上传文件
文档管理
日志管理
用户管理
菜单管理
结束
图4-3 分级控制流程图
4.2 数据库设计
(1)用户信息表
用户信息表主要提供用户的用户名、密码验证等一些列的用户信息内容。其所属角色ID(RoleID)引用角色表的RoleID用来判断此用户角色。用户信息表如表4-1所示。
表4-1 用户信息表user
字段名
数据类型
字段说明
键引用
备注
username
varchar2
用户名
主键
password
varchar2
密码
real
31、name
varchar2
真实姓名
organization_id
varchar2
机构id
外键
对应机构表
sex
int
性别
email
varchar2
电子邮件
phone_num
varchar2
联系方式
create_date_time
date
创建时间
last_login_time
date
上次登录时间
is_use
int
是否可用
(2)角色表
角色表主要用于设置不同角色ID对应的角色名称,此表用来判断用户所属角色,给其分配相应的权限。角色信息表如表
32、4-2所示。
表4-2 角色信息表user_role
字段名
数据类型
字段说明
键引用
备注
username
varchar2
用户名
主键
role_id
varchar2
角色id
外键
对应角色表
(3)角色功能表
角色功能表主要用于设置不同角色ID可以使用的一些列功能。角色功能表如表4-3所示。
表4-3 角色功能表role
字段名
数据类型
字段说明
键引用
备注
role_id
varchar2
角色id
主键
role_name
varchar2
角色名字
role_desc
varchar2
33、角色功能
organization_id
varchar2
机构名
外键
对应机构表
creat_date_time
date
创建时间
(4)机构表
机构表主要是机构的相关信息,上下级机构。机构表如表4-4所示。
表4-4 机构表organization
字段名
数据类型
字段说明
键引用
备注
organization_id
varchar2
机构id
主键
organization_name
varchar2
机构名字
organization_code
varchar2
机构编号
parent_i
34、d
varchar2
父亲id
(5)菜单表
菜单表主要用于管理菜单的功能。菜单表如表4-5所示。
表4-5 菜单表menu
字段名
数据类型
字段说明
键引用
备注
menu_id
varchar2
表id
主键
menu_name
varchar2
菜单名
menu_desc
varchar2
菜单功能
parent_id
varchar2
父亲id
link
varchar2
对应链接
sequence
int
序列
(6)日志表
日志表主要用查看用户的对系统的一系列操作情况
35、日志表如表4-6所示。
表4-6 日志表diary
字段名
数据类型
字段说明
键引用
备注
diary_id
varchar2
日志id
主键
content
varchar2
内容
username
varchar2
用户名
table_name
varchar2
操作的数据库
对应机构表
ip
varchar2
登录ip
organization_id
varchar2
机构id
外键
机构表id
organization_name
varchar2
机构名
create_date_
36、time
date
创建时间
(7)部门表
部门表主要用于设置部门的上下级关系,部门名称等相关信息。部门表如表4-7所示。
表4-7 部门表department
字段名
数据类型
字段说明
键引用
备注
department_id
varchar2
部门id
主键
department_name
varchar2
部门名
department_code
varchar2
部门信息
parent_id
varchar2
父亲id
organization_id
varchar2
机构id
外键
机构表主键
37、
(8)类别表
类别表主要用于设置类别相关信息。类别表如表4-8所示。
表4-8 类别表type
字段名
数据类型
字段说明
键引用
备注
type_id
varchar2
类别id
主键
res_type_name
varchar2
类别名
type_code
varchar2
类别信息
parent_id
varchar2
父亲id
sequence
int
序列
(9)文档表
文档表主要用于设置文档的详细信息。文档表如表4-9所示。
表4-9 文档表document
字段名
数据类型
字段说明
38、
键引用
备注
doc_id
varchar2
文档id
主键
doc_title
varchar2
文档标题
doc_desc
varchar2
文档备注
type_id
varchar2
类别id
外键
类别表id
username
varchar2
用户名
last_view_user
varchar2
上次查看人
file_path
varchar2
存储路径
create_date_time
date
创建时间
modify_date_time
date
最后修改日期
39、
4.3 数据库连接设计
连接数据库采用JDBC,JDBC应用步骤如下:
(1)注册加载一个driver驱动,相关代码如下:
Class.forName("oracle.mysql.jdbc.Driver");
(2)创建数据库连接,相关代码如下:
private String
url="jdbc:mysql://localhost:3306/testDB?user=root&password=root&useUnicode=true&characterEncoding=gb2312";
Connection con = DriverManager.getConnec
40、tion(url);
(3)创建一个Statement,相关代码如下:
Statement stmt = conn.createStatement();
(4)执行SQL语句,相关代码如下:
String sql="select * form user_role";
ResultSet rs = stmt.executeQuery(sql);
(5)访问结果记录集ResultSet对象,相关代码如下:
while(rs.next){
out.print(rs.getString());
}
(6)依次关闭ResultSet、Statement、Connectio
41、n对象,相关代码如下:
rs.close();
stmt.close();
con.close();
4.4 SSH框架设计
本次系统使用struts+spring+hibernate的一个集成框架,分为四层:表示层、业务逻辑层、数据持久层和域模块层[6]。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。
基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责接收请求(Request)和传送响应(Response
42、然后Struts根据配置文件将ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的Spring IOC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑并提供事物处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
这种开发模式,不仅实现了视图、控制器与模型的测底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对
43、前端有所影响,大大提高了系统的可复用性。而且由于不通过层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率[7]。SSH框架图如图4-4所示。
数据库
持久层Hibernate
控制器Struts
Request
ActionServlet
Hibernate
ActionForm
HibernateDAO
Spring IOC
Action
Response
JSP
Spring AOP
图4-4 SSH框架图
5 详细设计
5.1登录界面设计
登录界面采用常用的用户名+密码模式进行登录,在用
44、户输入相应的登录ID,密码以及验证码之后,系统对数据库中ID与PWD字段进行验证,进而与验证码验证。如果发现全部对应,则登录成功,进入其他页面以进行下一步操作,否则显示登录失败。登录界面如图5-1所示。
图5-1 登录界面
5.2 菜单管理界面设计
管理员登录后可以使用菜单管理功能,用于添加菜单,这些都是管理员能分配给其他用户的权限。如图5-2所示。
图5-2 菜单管理界面图
进入菜单管理后,可以新建菜单,需设置上级菜单等,新建菜单如图5-3所示。
图5-3 新建菜单
5.3 部门以及机构
45、管理界面设计
不同部门属于不同机构,删除机构后其隶属的子部门也全部删除。部门管理界面如图5-4所示。
图5-4 部门管理界面
5.4 用户管理界面设计
用户隶属不同组,组对应其部门,部门对应机构,层层对应,删除响应结点其对应子结点也删除。用户管理界面如图5-5所示。
图5-5 用户管理界面
5.5角色管理界面设计
不同角色对应不同功能,管理员可以按需求设置拥有不同功能的角色,然后分配给用户实现分级别管理。如图5-6所示。
图5-6 新建角色界面
5.6 日志管理界面设计
用户登录后对
46、系统的一系列操作都会显示在这里,用于监听用户的操作。如图5-7所示。
图5-7 日志管理界面
5.7 文档类型管理界面设计
文档按类型划分,可以设置不同类型,根据需求设置一级二级甚至三级类型。类型管理如图5-8所示。
图5-8 类型管理界面
5.8 文档管理界面设计
用户可以上传下载文档,上传文档放于apache目录下的工程文件子目录中。文档管理如图5-9所示。
图5-9 文档管理界面
5.9 Struts2设计
Struts2框架本身大致可以分为3个部分:核心控制器Filte
47、rDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用[12]。
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServl
48、et接收到一个客户请求时,将执行如下流程.
(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
(5)ActionServlet
49、根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
Struts配置相关代码如下,web.xml中:
struts2
50、
org.apache.struts2.dispatcher.FilterDispatcher
struts2
*.jsp
*.aspx
*.do
struts2.xml中: