拼吾爱程序人生

首页 » 其他编程 » Java » 利用Java服务程序开发三层次数据库应用程序
SystemPoster - 2008-7-6 16:26:00
〈唇ǔ晒Φ耐蛭镜愕氖谐⌒枨蟠偈剐畔⒎岣磺腋呓换バ缘耐蛭τ贸绦蛴υ硕T谄笠凳菘庵写娲⒆糯罅啃畔ⅲ笠狄财炔患按叵M茉谕蛭戏⒉颊庑┬畔ⅰF笠荡车目突Щ?/服务器应用程序正在被基于万维网的应用程序所淘汰。而这种趋势之所以成为可能,主要是因为通用客户程序,即万维网浏览器的存在。

本文是有关Java服务程序的三组系列文章之二。上个月( JDJ,第3卷,第1期),我向大家介绍了Java服务程序技术,以及如何将您现有的CGI程序移植到Java服务程序的方法。本文将不再重复以前介绍的内容。我先假定大家对Java  Servlet API (应用程序设计接口)和Java数据库连接API的基本知识已经比较熟悉。在本文中,我将介绍如何利用Java服务程序(Servlet)和Java数据库连接(JDBC) 技术创建三层次数据库应用程序。您将了解每一层的创建方法以及采用数据库连接来创建Java服务程序所使用的技术。 

   
挑 战
 
某著名公众演说家对参加她举办的因特网讲座的学生进行跟踪调查。每次讲座结束后,她都会与感兴趣的学生交换名片。然后,把学生数据输入她的数据库程序。她并非把每张名片的数据依次输入计算机,而是借助万维网应用程序来完成这项工作。在每次举办讲座时,她都在若干万维网终端上设立万维网应用程序。每位学生都在万维网终端登记,输入各自的姓名、所在公司、电子邮件(e-mail)地址、课程名称和对课程的期望。万维网应用程序还可显示所有学生的最新名单。

   
三层解决方案
 
这个万维网应用程序由三部分组成:浏览器、服务程序中间件和数据库服务程序。这三层如图1所示。
 

 
图1  三层次解决方案 

第一层使用浏览器,可充分发挥这一通用客户端巨大的用户安装数的优势。用一个HTML表格作为用户输入界面,而数据库查询结果用HTML页面返回。采用HTML页面作为用  户输入和数据显示的界面可降低对客户端浏览器版本的要求。这种万维网应用程序并不要求必须采用具有最新JDK修补程序的Java使能的浏览器。

第二层采用运行Java服务程序的Web服务器。Java服务程序可访问  菘猓⒎祷亓杏惺莸腍TML页面。请注意,Java服务程序不只运行于Sun  Microsystems公司的Java Web Server上,您也可在下列服务器上使用Java服务程序:Microsoft IIS、Netscape  FastTrack Server及Enterprise Server以及O?Reilly公司的WebSiteProfessional。在Live Software公司的JRun产品(http://www.livesoftware.com)上也可实现Java服务程序的功能。Sun公司的Java  Server主页http://jserv.javasoft.com上列有支持Java服务程序的Web服务器列表。 

第三层是后端数据库服务器。只要计算机安装了JDBC驱动程序,那么Java服务程序就能从数据库中提取数据。在本文所讨论的情形里,公众演说家的数据库是MS-Access, 所以,我们可以使用与Java Development Kit 1.1版或更高版本捆绑在一起的JDBC-ODBC驱动程序。

   
应用程序的交互过程
 
您可以看到,应用程序被划分成三个不同的层次。图2表示应用程序不同层次之间的交互过程。   

 
图2 应用程序的交互过程 

下面介绍交互过程的每个步骤。 第一步: 用户将信息输入HTML表格。表格的数据被传输到在Web服务器上运行的Java服务程序中。

第二步: Java服务程序对表格的数据进行分析,并创建一条SQL语句。然后,通过Java数据库接口(JDBC)将该SQL语句传输到数据库服务器。

第三步: 数据库服务器执行该SQL语句,并将一组结果返回给Java服务程序。

第四步: Java服务程序对这组结果进行处理,并用其中的数据创建一个HTML页面。随后,该HTML页面被返回到用户的Web浏览器。

   
对数据库模式进行分析
 
本文的公众演说家正在将学生信息存入MS Access数据库。该数据库包括一个名为"Students"的数据表。表1定义了数据字段。   

 
表1 数据库结构 

   
设计Web浏览器界面
 
浏览器界面包括一个主菜单页面。用户使用该页面可选择学生注册,或显示数据库中的学生。列表1提供了主菜单的HTML代码。 

   
学生注册表
 
学生使用HTML表格进行注册。该表格采集姓名、电子函件地址、公司名称和其它与课程相关的信息。图3为学生注册表。   

 
图3 学生登记注册表 

   
开发服务程序中间件
 
服务程序中间件封装了应用程序的业务逻辑。服务程序对表格中的数据进行分析,并构造一条SQL语句。随后,该SQL语句被传送到数据库服务器。在SQL语句执行完毕后,数据库服务器将结果集返回给服务程序。至此,服务程序对结果集进行处理,并为用户构造一个HTML页面。 

被创建的服务程序称作StudentDBServlet。StudentDBServlet有执行下列功能的方法:初始化、对请求的服务、对学生数据的显示和对学生的登记。下面详细介绍这些功能。 

   
服务程序的初始化
 
在服务程序的生命周期内,当服务程序第一次被调用时,首先调用init()方法。列表3为init()方法的代码清单。 

StudentDBServlet服务程序来说,一个数据库连接被打开,并创建用于显示学生列表或进行学记的预先准备好的SQL语句(Prepared Statement)。这个数据库连接在服务程序的整个生命周期内都将保持打开的状态。根据用户的设计,用户可以为每个SQL查询打开或关闭一个连接。但在此应用中,数据库连接仅打开一次。 

   
对用户请求提供服务
 
每次服务程序被调用时,service()方法会被调用。service()方法是服务程序的主要入口点(Entry Point)。但是,如果这是服务程序第一次被调用,那么就会先调用init()方法,然后再调用service()方法。 

本应用中的service()方法系用来将请求转移给相应的处理方法。学生登记表中有一个名为“Register”的隐含字段。service()方法核对“Register”字段的值。如果该值非空(null),则registerStudent()方法就被调用。如果HTML页面不存在该字段,则返回一个空值(null)。如果返回空值(null),则会执行displayStudent()方法。

   
显示学生名单
 
displayStudent()方法包括访问数据库和显示学生名单的业务逻辑。这是通过使用辅助的Student (学生)类实现的。列表4  给出了Student类的代码。

Student类有为每位学生保持信息的数据成员。Student类还有能根据表格数据或一组数据库结果创建对象的构造程序。下列语句表示学生的姓是如何从表格数据中获取  的。

    lastName = request.getParameter ("LastName"); 

请求对象是HttpServletRequest的一个实例。请求对象包含表格数据。表格数据可通过调用getParameter( )方法并提供表格字段的名称获得。学生注册表中包含有一个LastName字段。 (请参考我以前发表在JDJ的文章,其中详细讨论了服务程序如何获取表格数据)。

Student类有存取其数据成员并以字符串方式表示其数据的方法。列表4中包括了Student类的方法代码清单。toString()方法以普通的字符串格式返回数据成员。toWebString(  )方法以HTML无序列表的格式返回数据。toTableString( )方法以HTML表格的格式返回数据。这些方法被用来创建学生名单。

构造一个HTML页面后就创建了学生名单。在列表3中的displayStudents()方法中,创建了HTML页面的标题。随后再创建显示下列信息的表格标题。 

服务程序向数据库服务器发出请求,获得学生的名单。在init()方法中准备了下列SQL语句。
    select * from Students order  by LastName;


SQL语句将根据姓氏并按照字母顺序返回学生的名单。这组结果被用来创建HTML表格的主体。通过创建while循环语句,处理这组结果的每个记录。该while循环语句的  部分代码如下。

    int rowNumber = 1;    while (dataResultSet.next( ) )    {        aStudent = new Student(dataResultSet);        tableBody  = aStudent.toTableString(rowNumber);        rowNumber  ;    }

每个记录都被用来创建一个新的Student对象。toTableString()方法被调用,以获得学生数据的字符串表示。前面谈到,toTableString(  )方法以HTML表格的格式返回数据。

在构造了表格主体后,结果集就被关闭。在主页的底部,还提供了至主菜单页面的浏览链接。

在服务程序方面进行了大量的处理工作。但我们到现在还没有结束。必须将HTML页面返回给Web浏览器。这是通过在响应对象上打开一个输出流实现的。响应对象是HttpServletResponse的一个实例。将HTML页面返回给用户的语句如下: 

    PrintWriter outputToBrowser = new PrintWriter(response.getOutputStream());    response.setContentType("text/html") ;    outputToBrowser.println(htmlPage);    outputToBrowser.close( );

为HTML设置了内容类型(content-type)后,用println()方法将htmlPage串返回给浏览器。图4为StudentDBSServlet所返回的学生名单样本。   

 
图4 学生名单 
   
将来的升级
 
这个三层次Web应用程序允许学生登记各自的学生信息。该应用程序还可显示更新的学生名单。但该应用程序并非十全十美。还有一些地方可以加以改进、提高。 

经过升级,该应用程序可显示来自不同城市、公司或参加不同课程的学生。用户可自行设计查询,创建学生列表。此外,该应用程序经过升级还可实现学生输入项的更新和删除等远程数据库管理功能。目前,该应用程序尚不能在输入的表格数据上进行错误检查。客户端的JavaScript可用来核实用户数据。该应用程序也没有考虑一名学生参加多个讲座的情况。该应用程序经过升级后就能为一名学生保持多个课目。 

   
结 论
 
本文讨论了创建三层次数据库应用程序的基本部件和技术。您可利用本文所提供的信息,快速、方便地在您现有的企业数据库上创建万维网接口。Java服务程序技术与Java数据库连接(  Java Database Connection )技术一起构成了创建信息丰富的和便于交互的Web应用程序的基础。

   
资 源
 
本文源代码清单: http://www.j-nine.com/pubs/dbservlets 

Sun Microsystems (太阳微系统)公司的Java Server主页:  http://jserv.javasoft.com

Live Software, JRun 2.0  http://www.livesoftware.com


    3 4 5 6 7 8

 您可能对 [Java] 的这些文章也感兴趣:

使用Java Swing 创建一个XML编辑器
用 Java 保存位图文件
在JavaScript程序中整合Java函数
Java布局管理器深入讨论
Enterprise bean的开发
推技术聊天室的实现(下)
推技术聊天室的实现(上)
J2EE概述
从商业角度看J2EE与WINDOWS DNA
XML和J2EE的组合技术
简析J2EE应用程序数据库类设计模式
Java中的两个特殊变量this和super
1
查看完整版本: 利用Java服务程序开发三层次数据库应用程序
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: