SlideShare a Scribd company logo
基于 J2EE 的通用 Web 信息系统框架设计与实现



     摘要


本文描述了一个通用的 Web 信息系统开发框架在 J2EE 平台上的设计与实现过程。此通用框架符合 MVC 结构
的特点,能改善和优化信息系统开发过程;提高系统性能;使系统具有良好的可扩充性、可重用性和可维护性。


Sommaire


   •   引言
   •   1 J2EE的技术优势及体系结构
   •   2 通用信息系统框架结构模型
   •   3 通用Web 信息系统框架的实现
            o   3.1 Action、 Dao、 Model 的协作工作
            o   3.2 数据库设计
            o   3.3 数据库访问
            o   3.4 实现实例
   •   结论


引言


随着 Internet 技术的日益成熟,网络已成为新的信息系统平台。由于服从统一的网络协议和标准,统一的浏览
器界面,基于 Web 技术的信息系统应用越来越广泛。目前,Web 应用程序开发一般采用微软的.NET 架构和
SUN 的 J2EE 架构,这两种架构各有其优缺点。综合考虑系统结构、开发周期、可扩充性、可重用性和可维护
性等方面的因素,采用符合 MVC(Model-View-Controller)的开发模式,用 J2EE 构建通用 Web 信息系统
框架是较为合适的选择。


1 J2EE 的技术优势及体系结构




分布式对象技术有三种工业标准:MS 的分布式组件对象模型 DCOM(Componet Object Model),
OMG(Object Management Group)的公用对象请求代理程序结 CORBA(Common Object Request Broker
Architecture)和 SUN 的 J2EE。DCOM 的致命缺点是跨平台性能差,从部署到运行只能采用微软的平台;
CORBA 的缺点是庞大而复杂,标准的更新相对较慢;而 J2EE 简化和规范了多层分布式系统的开发和部署,得
到业界的广泛支持,常常是企业级分布式应用程序的首选平台。J2EE 提供一个多层结构的分布式应用程序模型,
该模型拥有方便存取数据库的 JDBC 技术,基于 XML 的数据交换技术,组件重用能力,统一的安全模式和灵活
的事务控制机制,还提供对 EJB,Servlets 和 JSP 的全面支持。J2EE 的分层体系结构由客户端层,表示层,
业务逻辑层,系统数据层组成。客户端:可以是 Web 浏览器也可以是非 Web 浏览器的应用程序。主要负责为
系统提供操作界面,它可以通过 HTTP 协议或 RMI-IIOP 协议来访问系统的中间层。表示层:该层主要目的是
提供逻辑视图,系统业务数据通过此视图展现。在 J2EE 中主要由 JSP, Servlet 和 Java Bean 等组成。业务
逻辑层:该层主要负责系统的业务逻辑实现。主要由会话 Bea(SessionBean)和实体 Bean(Entity Bean)
组成。会话 Bean 主要负责业务的逻辑实现、控制以及与表示层的通信。除了会话 Bean 外,系统还有很多辅
助类,这些类为该业务逻辑层提供了丰富和灵活的控制功能,实体 Bean 主要负责保存业务数据,为会话 Bean
访问业务数据提供接口。除此之外,实体 Bean 还负责实现数据对象与关系数据库中记录之间的映射。系统数据
层:后台数据库层,存放系统业务数据及系统支持数据,系统数据库层配置了一个连接池。连接池采用的标准是
SUN 的 JDBC,以保证业务与数据库的连接的高性。


2 通用信息系统框架结构模型


框架可使编程人员在一个通用功能已经实现的基础上开始具体的系统开发,它提供了可重用的抽象算法及高层设
计,并能将大系统分解成更小的构件,而且能描述构件间的内部接口,这些标准接口使得在已有的构件基础上通
过组装建立各种各样的系统成为可能。通用 Web 信息系统框架(图 1)是一个符合 MVC 设计模式的通用系统
开发模型,通过此模型,将大大简化系统开发复杂程度,使程序层次结构清晰,调试简单。




图 1 中框架公共页面包含与框架有关的所有静态页面


系统通用目录结构包括 Images 目录存放框架相关图片,Js 目录放置常用的 Web 控件,Css 目录存放样式表
文件;WEB-INF 目录包含所有的 Java 类文件以及针对不同数据库的包文件。通用 Web 信息系统框架数据处
理逻辑如图 2 所示。图 2 中 JSP 是应用的 View,处理表示逻辑。采用 JSP 模板技术,动态组合最终显示页
面;Action Servlet 是应用的 Controller,是所有请求的入口和分发中心,它根据 HTTP 请求的 URL 决定将
要进行的操作,并从 Hander mapping 中找到相应的 handler 处理类,handler 负责处理 HTTP 请求,收集
参数,调用相应的 Businesslogic 类,将处理结果放入 HttpRequest/Http Session 对象中,同时格式化处理
信息。通过解释 Screedefinition.xml 文件决定下一页 URL;Business Delegate Classes 提供应用业务的
接口,对 Web 层隐藏业务逻辑的实现,以便将来与 AE(Application Envelope)集成,不同层之间交换的数
据保存在 model 类中;Business logic classes 封装应用的业务逻辑,DAO(Data Access Object )则完
成相关数据库操作,DAO 层使用 modellis 组件。




                                t 组件。




图 2 通用 Web 信息系统框架数据处理逻辑图
上述通用 Web 信息系统框架 UML 序列图见图 3。
图 3 通用 Web 信息系统框架 UML 序列图




本通用 Web 信息系统框架的特点是:只要修改图 1 中①②处就可以配置任何 Web 应用程序;修改图 1 中③
④处就可以对系统进行功能扩充;可以方便地进行快速开发。类文件的开发是任何 Web 应用开发的重点,我们
根据所处理的业务不同来开发不同的功能模块,并组织成一个包。为避免出现命名冲突,任何功能模块都采用
Action+ Dao+ Model 的结构。


3 通用 Web 信息系统框架的实现



3.1 Action、 Dao、 Model 的协作工作

我们以数据库查询为例来说明 Action、 Dao、 Model 的协作工作。
(1)Action 实现数据库记录的增加,删除,查询,更新四种操作。关键代码如下:
if(request.getParameter(Screen.JSP_FORM_ACTION).equals(Screen.JSP_ACTION_VALUE_QUER
Y))
{ model.setSTUDENTID(getInPutValue("STUDENTID"));
try
{ ml = db.InitializeQuery(model, 0, Screen.SES_PerPage);
request.getSession().setAttribute(WebKeys.SES_WillInputModel_KEY, model);
request.setAttribute(WebKeys.SES_Query_STUDENT_WILL, ml);
this.forwardAction();
return;}
catch (DAOException e){ throw new HTMLActionException(error);}
关键代码说明:通过获取页面动作来选择相应的 Action,同时利用会话 Session 与 Model
完成页面间数据的传递。
(2)Dao 主要完成 SQL 语句的拼凑工作,关键代码如下:
private String QuerySql(WillInputModel model)
{ sql.append("select * from ").append(DatabaseNames.STUDENT_WILL).append(" where ");
str = model.getSTUDENTID();
if (str != null && !str.equals(""))
{ sql.append("STUDENTID = '").append(model.getSTUDENTID()).append("' and "); }
if (sql.toString().substring(sql.length() - 7).equals(" where "))
{ //如果没有给定条件,则查询全部记录
sql.delete(sql.length() - 7, sql.length()); //去掉 sql 语句后的 where
}
else
{ sql.delete(sql.length() - 5, sql.length()); //有指定条件时,去掉 sql 语句后的 and }
return sql.toString();
}
(3)Model 定义一个数据模型,针对每一个数据表或视图均建立一个 Model。关键代
码如下:
public WillInputModel() { }
//定义字段变量
private String WILL_CODE;
public void setWILL_CODE(String WILL_CODE) { this.WILL_CODE = WILL_CODE;}
public String getWILL_CODE() { return this.WILL_CODE;}
采用 Action+ Dao+ Model 这种结构可以使得整个开发和调试过程变得简单。



3.2 数据库设计

为实现此框架,我们设计了四个表(表 1)。其中 CUS_SYSUSER、CUS_ROLE 和 CUS_ROLE_PURVIEW 分
别为用户表、、角色表和角色权限表,通过这三个表实现了系统的授权控制。本框架采用用户角色组来实现分级
授权,不同的用户权限分配不同的使用菜单,同时上级用户可以向下级用户授权。CUS_ACTIONS 是系统功能
表,在开发信息系统时进行相应的更改。
表 1 表结构



3.3 数据库访问

我们在 Proxool 连接池[5]组件的基础上撰写了一个类来封装一些基本的方法。这些方法
是在我们使用 JPool 时用过的方法,可以从结果集中取记录而不必重新执行 executeCount()
来取得。Jpool 类关键代码实现的了以下方法[6]:
(1)public static int executeCount(String source, String sql)throws SQLException//执行 SQL,得
到结果集
中记录条数
(2)public static void executeTransaction(String source, String sql) throws SQLException//执行事
务[6]
(3)public static void rollback(UserTransaction userTransaction)// 回滚事务[6]
(4)public static ResultSet getResultSet(String source, String sql) throws SQLException//得到一
个结果集
对象
(5)public static void returnResultSet(ResultSet resultSet) throws SQLException//释放结果集对象
(6)public static Connection getConnection(String source, int connectionId) throws
IllegalArgumentEx
ception, SQLException//取得一个数据库连接对象
(7)public static void close(Connection connection) 关闭 connection 对象
3.4 实现实例

3.4.1 系统配置文件 test.properties

应用配置文件是通用 Web 信息系统的一个重要文件,通过此文件来映射 Action 与页面
文件的动作。以下是此框架配置文件的部分内容:
SCREEN_NoAction=/pub/NoAction.jsp#用户请求的 Action 不存在时返回页面
SCREEN_NoPurview=/pub/NoPurview.jsp#NO 权限返回页面
SCREEN_SessionInvalid=/pub/SessoinInvalid.jsp#session 失效时返回界面
channel_logon=components.admin.logon.actions.LogOnAction#系统登录处理
以下是系统用户模块的配置文件的部分内容:
SystemUser_add=components.admin.systemuser.actions.SystemUserAddAction#系统用户添加
SystemUser_quer=components.admin.systemuser.actions.SystemUserQueryAction#系统用户查询
SystemUser_modify=components.admin.systemuser.actions.SystemUserModifyAction#系统用户
修改
SystemUser_detail=components.admin.systemuser.actions.SystemUserQueryAction#系统用户详
细信息查看



3.4.2 本框架的流程(以用户管理为例)

用户登录页面 index.jsp 有如下关键代码:
<form action="/channel_logon.do" method="post" name="logonForm">
<input type=hidden name="action" value="query">
此段程序将被 Web.xml 文件解释成查询 test.properties 属性文件,执行相应类文件。
web.xml 是系统启动时自动加载的文件,通过配置 web.xml 文件可以设置系统初始化参
数,自动加载程序等。在使用数据库操作池时,还要设置数据库名,数据库驱动程序,连接
数据库用户、密码等作为系统的全局初始化参数。除此之外,还要指定系统启动时自动加载
的初始化程序。本通用 Web 信息系统 Web.xml 文件部分内容如下:
<servlet-mapping>
<servlet-name>servletreceive</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin_proxool</url-pattern>
</servlet-mapping>
其中 proxool.xml 中包含数据库初始化相关内容,文件关键内容如下
<alias>test</alias>
<driver-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=data</driver-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value="sa"/>
</driver-properties>
在本例中我们使用了<input type=hidden name="action" value="query">这一语句。此语句功能就是通
过匹配 Screen.java 文件从而根据 value 值调用 Action 中不同的数据库操作相关语句,比如查询,更新,删
除等。Screen.java 文件关键内容如下:
public static final String JSP_FORM_ACTION="action";//定义页面动作变量的名字
public static final String JSP_ACTION_VALUE_ADD="add";//定义页面动作变量的值(添加数据)
public static final String JSP_ACTION_VALUE_DEL="delete";//定义页面动作变量的值(删除数据)
public static final String JSP_ACTION_VALUE_MODIFY="modify";//定义页面动作变量的值(修改数据)
当然,此文件还包含有框架本身的一些相关信息,内容如下:
public static final String SCREEN_NoPurview_KEY="SCREEN_NoPurview";//用户权限不足错误页面
public static final String SCREEN_NoAction_Key="SCREEN_NoAction";//用户请求的页面或 Action 处
理类不存在
public static final int SES_PerPage=10;// 分页显示每页显示的记录数,默认每页显示 10 条在本框架中“框
架类文件”是一个工具包。含有如下一些文件:
(1)ConvertRequest.java 文件实现对 Http Request 的转换;
(2)Encoding.java 文件实现对需要进行编码转换的字符串进行转换。关键代码如下:
convertedString = new String(bos.toByteArray(), "GBK");
(3)ErrorCheck.java: 配合通用 JS 脚本完成数据的校验;
(4)ModelList.java:值对象列表。该对象存放多个 model 实例,一条实例对应数据库一条记录。同时该类
主要用于查询多条记录,在记录中做检索;
(5)PageUpDown.java :实现页面导航。如果有多条记录一屏无法显示时进行分页显示;
(6)UniqueIdGenerator.java:产生唯一键。
任何 Web 应用程序的开发都可以按首先配置 web.xml,proxool.xml 和 test.properties,
再实现相应 Model,Dao 和 Action,最后开发相应 JSP 页面这样的步骤来进行。基于以上框
架,可大大缩短开发时间,提高工作效率。
笔者利用以上通用框架开发了远程教育管理系统(图 4)。针对中小型 Web 信息系统的特
点,本框架没有使用 EJB,正因为如此,程序的复杂度大大降低。由于本框架结构清晰,非
常容易扩充和维护。因此可以满足中小型企业“快速响应,快速开发”的现实需求。




结论


本文详细论述了基于 J2EE 平台下通用 Web 信息系统框架的结构及实现过程。本框架符合 MVC 结构的特点,
采用了 Action+Model+Dao 的设计模式,结合 JSP、Servlet、会话 Bean 及 JDBC 技术,在 J2EE 平台上
实现了一个结构清晰,易扩充,高可靠性,跨平台,安全的通用 Web 信息系统的应用开发框架。利用此框架开
发 Web 应用程序,只需通过修改小量的配置文件即可新建一个 Web 应用。可以极大提高开发效率,使系统具
有良好的可维护性、可扩充性和重用性。

More Related Content

Similar to 基于J2 Ee 的通用Web 信息系统框架设计与实现

Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南yiditushe
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
江華 奚
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文
banq jdon
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记yiditushe
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
jeffz
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)wangjiaz
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
twMVC
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
江華 奚
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用yiditushe
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Gelis Wu
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈yiditushe
 
基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现billowqiu
 

Similar to 基于J2 Ee 的通用Web 信息系统框架设计与实现 (20)

Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用
 
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈
 
基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现
 

More from yiditushe

Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册yiditushe
 
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2yiditushe
 
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1yiditushe
 
性能测试技术
性能测试技术性能测试技术
性能测试技术yiditushe
 
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术yiditushe
 
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试yiditushe
 
面向对象的Js培训
面向对象的Js培训面向对象的Js培训
面向对象的Js培训yiditushe
 
Flex3中文教程
Flex3中文教程Flex3中文教程
Flex3中文教程
yiditushe
 
开放源代码的全文检索Lucene
开放源代码的全文检索Lucene开放源代码的全文检索Lucene
开放源代码的全文检索Luceneyiditushe
 
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍yiditushe
 
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Actionyiditushe
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1yiditushe
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demoyiditushe
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析yiditushe
 
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则yiditushe
 
10 团队开发
10  团队开发10  团队开发
10 团队开发yiditushe
 
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模yiditushe
 
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模yiditushe
 

More from yiditushe (20)

Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册
 
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2
 
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1
 
性能测试技术
性能测试技术性能测试技术
性能测试技术
 
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术
 
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试
 
面向对象的Js培训
面向对象的Js培训面向对象的Js培训
面向对象的Js培训
 
Flex3中文教程
Flex3中文教程Flex3中文教程
Flex3中文教程
 
开放源代码的全文检索Lucene
开放源代码的全文检索Lucene开放源代码的全文检索Lucene
开放源代码的全文检索Lucene
 
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍
 
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demo
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析
 
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则
 
10 团队开发
10  团队开发10  团队开发
10 团队开发
 
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模
 
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模
 

基于J2 Ee 的通用Web 信息系统框架设计与实现

  • 1. 基于 J2EE 的通用 Web 信息系统框架设计与实现 摘要 本文描述了一个通用的 Web 信息系统开发框架在 J2EE 平台上的设计与实现过程。此通用框架符合 MVC 结构 的特点,能改善和优化信息系统开发过程;提高系统性能;使系统具有良好的可扩充性、可重用性和可维护性。 Sommaire • 引言 • 1 J2EE的技术优势及体系结构 • 2 通用信息系统框架结构模型 • 3 通用Web 信息系统框架的实现 o 3.1 Action、 Dao、 Model 的协作工作 o 3.2 数据库设计 o 3.3 数据库访问 o 3.4 实现实例 • 结论 引言 随着 Internet 技术的日益成熟,网络已成为新的信息系统平台。由于服从统一的网络协议和标准,统一的浏览 器界面,基于 Web 技术的信息系统应用越来越广泛。目前,Web 应用程序开发一般采用微软的.NET 架构和 SUN 的 J2EE 架构,这两种架构各有其优缺点。综合考虑系统结构、开发周期、可扩充性、可重用性和可维护 性等方面的因素,采用符合 MVC(Model-View-Controller)的开发模式,用 J2EE 构建通用 Web 信息系统 框架是较为合适的选择。 1 J2EE 的技术优势及体系结构 分布式对象技术有三种工业标准:MS 的分布式组件对象模型 DCOM(Componet Object Model), OMG(Object Management Group)的公用对象请求代理程序结 CORBA(Common Object Request Broker Architecture)和 SUN 的 J2EE。DCOM 的致命缺点是跨平台性能差,从部署到运行只能采用微软的平台; CORBA 的缺点是庞大而复杂,标准的更新相对较慢;而 J2EE 简化和规范了多层分布式系统的开发和部署,得 到业界的广泛支持,常常是企业级分布式应用程序的首选平台。J2EE 提供一个多层结构的分布式应用程序模型, 该模型拥有方便存取数据库的 JDBC 技术,基于 XML 的数据交换技术,组件重用能力,统一的安全模式和灵活 的事务控制机制,还提供对 EJB,Servlets 和 JSP 的全面支持。J2EE 的分层体系结构由客户端层,表示层, 业务逻辑层,系统数据层组成。客户端:可以是 Web 浏览器也可以是非 Web 浏览器的应用程序。主要负责为 系统提供操作界面,它可以通过 HTTP 协议或 RMI-IIOP 协议来访问系统的中间层。表示层:该层主要目的是 提供逻辑视图,系统业务数据通过此视图展现。在 J2EE 中主要由 JSP, Servlet 和 Java Bean 等组成。业务 逻辑层:该层主要负责系统的业务逻辑实现。主要由会话 Bea(SessionBean)和实体 Bean(Entity Bean) 组成。会话 Bean 主要负责业务的逻辑实现、控制以及与表示层的通信。除了会话 Bean 外,系统还有很多辅 助类,这些类为该业务逻辑层提供了丰富和灵活的控制功能,实体 Bean 主要负责保存业务数据,为会话 Bean 访问业务数据提供接口。除此之外,实体 Bean 还负责实现数据对象与关系数据库中记录之间的映射。系统数据
  • 2. 层:后台数据库层,存放系统业务数据及系统支持数据,系统数据库层配置了一个连接池。连接池采用的标准是 SUN 的 JDBC,以保证业务与数据库的连接的高性。 2 通用信息系统框架结构模型 框架可使编程人员在一个通用功能已经实现的基础上开始具体的系统开发,它提供了可重用的抽象算法及高层设 计,并能将大系统分解成更小的构件,而且能描述构件间的内部接口,这些标准接口使得在已有的构件基础上通 过组装建立各种各样的系统成为可能。通用 Web 信息系统框架(图 1)是一个符合 MVC 设计模式的通用系统 开发模型,通过此模型,将大大简化系统开发复杂程度,使程序层次结构清晰,调试简单。 图 1 中框架公共页面包含与框架有关的所有静态页面 系统通用目录结构包括 Images 目录存放框架相关图片,Js 目录放置常用的 Web 控件,Css 目录存放样式表 文件;WEB-INF 目录包含所有的 Java 类文件以及针对不同数据库的包文件。通用 Web 信息系统框架数据处 理逻辑如图 2 所示。图 2 中 JSP 是应用的 View,处理表示逻辑。采用 JSP 模板技术,动态组合最终显示页 面;Action Servlet 是应用的 Controller,是所有请求的入口和分发中心,它根据 HTTP 请求的 URL 决定将 要进行的操作,并从 Hander mapping 中找到相应的 handler 处理类,handler 负责处理 HTTP 请求,收集 参数,调用相应的 Businesslogic 类,将处理结果放入 HttpRequest/Http Session 对象中,同时格式化处理 信息。通过解释 Screedefinition.xml 文件决定下一页 URL;Business Delegate Classes 提供应用业务的 接口,对 Web 层隐藏业务逻辑的实现,以便将来与 AE(Application Envelope)集成,不同层之间交换的数 据保存在 model 类中;Business logic classes 封装应用的业务逻辑,DAO(Data Access Object )则完
  • 3. 成相关数据库操作,DAO 层使用 modellis 组件。 t 组件。 图 2 通用 Web 信息系统框架数据处理逻辑图 上述通用 Web 信息系统框架 UML 序列图见图 3。
  • 4. 图 3 通用 Web 信息系统框架 UML 序列图 本通用 Web 信息系统框架的特点是:只要修改图 1 中①②处就可以配置任何 Web 应用程序;修改图 1 中③ ④处就可以对系统进行功能扩充;可以方便地进行快速开发。类文件的开发是任何 Web 应用开发的重点,我们 根据所处理的业务不同来开发不同的功能模块,并组织成一个包。为避免出现命名冲突,任何功能模块都采用 Action+ Dao+ Model 的结构。 3 通用 Web 信息系统框架的实现 3.1 Action、 Dao、 Model 的协作工作 我们以数据库查询为例来说明 Action、 Dao、 Model 的协作工作。 (1)Action 实现数据库记录的增加,删除,查询,更新四种操作。关键代码如下: if(request.getParameter(Screen.JSP_FORM_ACTION).equals(Screen.JSP_ACTION_VALUE_QUER Y)) { model.setSTUDENTID(getInPutValue("STUDENTID")); try { ml = db.InitializeQuery(model, 0, Screen.SES_PerPage);
  • 5. request.getSession().setAttribute(WebKeys.SES_WillInputModel_KEY, model); request.setAttribute(WebKeys.SES_Query_STUDENT_WILL, ml); this.forwardAction(); return;} catch (DAOException e){ throw new HTMLActionException(error);} 关键代码说明:通过获取页面动作来选择相应的 Action,同时利用会话 Session 与 Model 完成页面间数据的传递。 (2)Dao 主要完成 SQL 语句的拼凑工作,关键代码如下: private String QuerySql(WillInputModel model) { sql.append("select * from ").append(DatabaseNames.STUDENT_WILL).append(" where "); str = model.getSTUDENTID(); if (str != null && !str.equals("")) { sql.append("STUDENTID = '").append(model.getSTUDENTID()).append("' and "); } if (sql.toString().substring(sql.length() - 7).equals(" where ")) { //如果没有给定条件,则查询全部记录 sql.delete(sql.length() - 7, sql.length()); //去掉 sql 语句后的 where } else { sql.delete(sql.length() - 5, sql.length()); //有指定条件时,去掉 sql 语句后的 and } return sql.toString(); } (3)Model 定义一个数据模型,针对每一个数据表或视图均建立一个 Model。关键代 码如下: public WillInputModel() { } //定义字段变量 private String WILL_CODE; public void setWILL_CODE(String WILL_CODE) { this.WILL_CODE = WILL_CODE;} public String getWILL_CODE() { return this.WILL_CODE;} 采用 Action+ Dao+ Model 这种结构可以使得整个开发和调试过程变得简单。 3.2 数据库设计 为实现此框架,我们设计了四个表(表 1)。其中 CUS_SYSUSER、CUS_ROLE 和 CUS_ROLE_PURVIEW 分 别为用户表、、角色表和角色权限表,通过这三个表实现了系统的授权控制。本框架采用用户角色组来实现分级 授权,不同的用户权限分配不同的使用菜单,同时上级用户可以向下级用户授权。CUS_ACTIONS 是系统功能 表,在开发信息系统时进行相应的更改。
  • 6. 表 1 表结构 3.3 数据库访问 我们在 Proxool 连接池[5]组件的基础上撰写了一个类来封装一些基本的方法。这些方法 是在我们使用 JPool 时用过的方法,可以从结果集中取记录而不必重新执行 executeCount() 来取得。Jpool 类关键代码实现的了以下方法[6]: (1)public static int executeCount(String source, String sql)throws SQLException//执行 SQL,得 到结果集 中记录条数 (2)public static void executeTransaction(String source, String sql) throws SQLException//执行事 务[6] (3)public static void rollback(UserTransaction userTransaction)// 回滚事务[6] (4)public static ResultSet getResultSet(String source, String sql) throws SQLException//得到一 个结果集 对象 (5)public static void returnResultSet(ResultSet resultSet) throws SQLException//释放结果集对象 (6)public static Connection getConnection(String source, int connectionId) throws IllegalArgumentEx ception, SQLException//取得一个数据库连接对象 (7)public static void close(Connection connection) 关闭 connection 对象
  • 7. 3.4 实现实例 3.4.1 系统配置文件 test.properties 应用配置文件是通用 Web 信息系统的一个重要文件,通过此文件来映射 Action 与页面 文件的动作。以下是此框架配置文件的部分内容: SCREEN_NoAction=/pub/NoAction.jsp#用户请求的 Action 不存在时返回页面 SCREEN_NoPurview=/pub/NoPurview.jsp#NO 权限返回页面 SCREEN_SessionInvalid=/pub/SessoinInvalid.jsp#session 失效时返回界面 channel_logon=components.admin.logon.actions.LogOnAction#系统登录处理 以下是系统用户模块的配置文件的部分内容: SystemUser_add=components.admin.systemuser.actions.SystemUserAddAction#系统用户添加 SystemUser_quer=components.admin.systemuser.actions.SystemUserQueryAction#系统用户查询 SystemUser_modify=components.admin.systemuser.actions.SystemUserModifyAction#系统用户 修改 SystemUser_detail=components.admin.systemuser.actions.SystemUserQueryAction#系统用户详 细信息查看 3.4.2 本框架的流程(以用户管理为例) 用户登录页面 index.jsp 有如下关键代码: <form action="/channel_logon.do" method="post" name="logonForm"> <input type=hidden name="action" value="query"> 此段程序将被 Web.xml 文件解释成查询 test.properties 属性文件,执行相应类文件。 web.xml 是系统启动时自动加载的文件,通过配置 web.xml 文件可以设置系统初始化参 数,自动加载程序等。在使用数据库操作池时,还要设置数据库名,数据库驱动程序,连接 数据库用户、密码等作为系统的全局初始化参数。除此之外,还要指定系统启动时自动加载 的初始化程序。本通用 Web 信息系统 Web.xml 文件部分内容如下: <servlet-mapping> <servlet-name>servletreceive</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Admin</servlet-name> <url-pattern>/admin_proxool</url-pattern> </servlet-mapping> 其中 proxool.xml 中包含数据库初始化相关内容,文件关键内容如下 <alias>test</alias> <driver-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=data</driver-url> <driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class> <driver-properties> <property name="user" value="sa"/>
  • 8. <property name="password" value="sa"/> </driver-properties> 在本例中我们使用了<input type=hidden name="action" value="query">这一语句。此语句功能就是通 过匹配 Screen.java 文件从而根据 value 值调用 Action 中不同的数据库操作相关语句,比如查询,更新,删 除等。Screen.java 文件关键内容如下: public static final String JSP_FORM_ACTION="action";//定义页面动作变量的名字 public static final String JSP_ACTION_VALUE_ADD="add";//定义页面动作变量的值(添加数据) public static final String JSP_ACTION_VALUE_DEL="delete";//定义页面动作变量的值(删除数据) public static final String JSP_ACTION_VALUE_MODIFY="modify";//定义页面动作变量的值(修改数据) 当然,此文件还包含有框架本身的一些相关信息,内容如下: public static final String SCREEN_NoPurview_KEY="SCREEN_NoPurview";//用户权限不足错误页面 public static final String SCREEN_NoAction_Key="SCREEN_NoAction";//用户请求的页面或 Action 处 理类不存在 public static final int SES_PerPage=10;// 分页显示每页显示的记录数,默认每页显示 10 条在本框架中“框 架类文件”是一个工具包。含有如下一些文件: (1)ConvertRequest.java 文件实现对 Http Request 的转换; (2)Encoding.java 文件实现对需要进行编码转换的字符串进行转换。关键代码如下: convertedString = new String(bos.toByteArray(), "GBK"); (3)ErrorCheck.java: 配合通用 JS 脚本完成数据的校验; (4)ModelList.java:值对象列表。该对象存放多个 model 实例,一条实例对应数据库一条记录。同时该类 主要用于查询多条记录,在记录中做检索; (5)PageUpDown.java :实现页面导航。如果有多条记录一屏无法显示时进行分页显示; (6)UniqueIdGenerator.java:产生唯一键。 任何 Web 应用程序的开发都可以按首先配置 web.xml,proxool.xml 和 test.properties, 再实现相应 Model,Dao 和 Action,最后开发相应 JSP 页面这样的步骤来进行。基于以上框 架,可大大缩短开发时间,提高工作效率。 笔者利用以上通用框架开发了远程教育管理系统(图 4)。针对中小型 Web 信息系统的特 点,本框架没有使用 EJB,正因为如此,程序的复杂度大大降低。由于本框架结构清晰,非
  • 9. 常容易扩充和维护。因此可以满足中小型企业“快速响应,快速开发”的现实需求。 结论 本文详细论述了基于 J2EE 平台下通用 Web 信息系统框架的结构及实现过程。本框架符合 MVC 结构的特点, 采用了 Action+Model+Dao 的设计模式,结合 JSP、Servlet、会话 Bean 及 JDBC 技术,在 J2EE 平台上 实现了一个结构清晰,易扩充,高可靠性,跨平台,安全的通用 Web 信息系统的应用开发框架。利用此框架开 发 Web 应用程序,只需通过修改小量的配置文件即可新建一个 Web 应用。可以极大提高开发效率,使系统具 有良好的可维护性、可扩充性和重用性。