服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

利用java服务程序开发三层次数据库应用程序


  本文是有关java服务程序的三组系列文章之二。上个月( jdj,第3卷,第1期),我向大家介绍了java服务程序技术,以及如何将您现有的cgi程序移植到java服务程序的方法。本文将不再重复以前介绍的内容。我先假定大家对java servlet api (应用程序设计接口)和java数据库连接api的基本知识已经比较熟悉。在本文中,我将介绍如何利用java服务程序(servlet)和java数据库连接(jdbc) 技术创建三层次数据库应用程序。您将了解每一层的创建方法以及采用数据库连接来创建java服务程序所使用的技术。
  挑 战
  某著名公众演说家对参加她举办的因特网讲座的学生进行跟踪调查。每次讲座结束后,她都会与感兴趣的学生交换名片。然后,把学生数据输入她的数据库程序。她并非把每张名片的数据依次输入计算机,而是借助万维网应用程序来完成这项工作。在每次举办讲座时,她都在若干万维网终端上设立万维网应用程序。每位学生都在万维网终端登记,输入各自的姓名、所在公司、电子邮件(e-mail)地址、课程名称和对课程的期望。万维网应用程序还可显示所有学生的最新名单。
  三层解决方案
  这个万维网应用程序由三部分组成:浏览器、服务程序中间件和数据库服务程序。这三层如图1所示。
   利用java服务程序开发三层次数据库应用程序(图一)
  图1 三层次解决方案
  第一层使用浏览器,可充分发挥这一通用客户端巨大的用户安装数的优势。用一个html表格作为用户输入界面,而数据库查询结果用html页面返回。采用html页面作为用 户输入和数据显示的界面可降低对客户端浏览器版本的要求。这种万维网应用程序并不要求必须采用具有最新jdk修补程序的java使能的浏览器。
  第二层采用运行java服务程序的web服务器。java服务程序可访问 菘猓?并返回列有数据的html页面。请注意,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表示应用程序不同层次之间的交互过程。
   利用java服务程序开发三层次数据库应用程序(图二)
  图2 应用程序的交互过程
  下面介绍交互过程的每个步骤。 第一步: 用户将信息输入html表格。表格的数据被传输到在web服务器上运行的java服务程序中。
  第二步: java服务程序对表格的数据进行分析,并创建一条sql语句。然后,通过java数据库接口(jdbc)将该sql语句传输到数据库服务器。
  第三步: 数据库服务器执行该sql语句,并将一组结果返回给java服务程序。
  第四步: java服务程序对这组结果进行处理,并用其中的数据创建一个html页面。随后,该html页面被返回到用户的web浏览器。
  对数据库模式进行分析
  本文的公众演说家正在将学生信息存入ms access数据库。该数据库包括一个名为"students"的数据表。表1定义了数据字段
   利用java服务程序开发三层次数据库应用程序(图三)
   表1 数据库结构
  设计web浏览器界面
  浏览器界面包括一个主菜单页面。用户使用该页面可选择学生注册,或显示数据库中的学生。列表1提供了主菜单的html代码。
  学生注册表
  学生使用html表格进行注册。该表格采集姓名、电子函件地址、公司名称和其它与课程相关的信息。图3为学生注册表。
   利用java服务程序开发三层次数据库应用程序(图四)
  图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所返回的学生名单样本。
  利用java服务程序开发三层次数据库应用程序(图五)
  图4 学生名单
  学生的登记处理
  registerstudent()方法根据html表格数据创建一个新的student对象。这个student对象被用来作为在init( )方法已经准备好的sql语句中的参数。下列语句表示参数是如何设置的。
  registerstatement.setstring(last_name_position, astudent.getlastname());
  所有参数设置完毕后,就执行sql语句。该语句执行完毕后,新的学生数据就成功地插入到数据库中了。
  此外,还为用户构造了确认页面。确认页面包含成功地插入数据库的数据列表。student.towebstring()方法被调用,为无序列表提供一个html字符串。
  合
  至此,应用程序的全部三层均已构造完毕。用户界面由在浏览器中显示的html页面组成。对浏览器的唯一要求就是必须能显示html表格。microsoft (微软)公司和netscape(网景)公司所提供的两种主要浏览器均可轻松地满足这一要求,所以能保证web应用程序对浏览器是友好的。
  后端数据库是采用microsoft access创建的。但只要存在相应的jdbc驱动程序,就可使用任何一种数据库。在我们所讨论的情形里,公

扫描关注微信公众号