jsp+sql智能道路交通信息管理系统-文献翻译 联系客服

发布时间 : 星期四 文章jsp+sql智能道路交通信息管理系统-文献翻译更新完毕开始阅读31c9e445ff00bed5b9f31d74

这篇文章讨论用JSP和JDBC技术来整合WEB站点上的静态的、动态的和数据库的内容。为了简单和举例的需要,这里的JSP页面用简短的脚本来揭示JSP开发者根本的JDBC观点而不是把它们隐藏在传统的标签下。作者介绍了一种关键的设计途径就是整合JavaBeans组件和JDBC,就好像JSP技术已经运用了bean和HTTP一样。他也提供代码来执行这种整合。

建立在Java Servlet技术上, JSP技术是生成动态内容的Java 服务器端的核心。一种动态内容的来源是关系数据库。为了管理来自在线社团的电子商务事务,WEB站点用关系数据库来存储各种信息:目录条款,图像,文本,注册用户的数据等等。这篇文章讨论利用JDBC的JSP与关系数据库的应用。JDBC的意思就是通过它,Java程序可以操作关系数据库。

为了能更好的学习这篇文章,你应该熟悉JDBC和SQL。

2.1 JDBC基础

JDBC是连接Java和SQL数据库的桥梁。首要的JDBC对象描述数据库的连接且语句的执行要依赖这个连接。和关系数据库一起使用的两种基本的语句是查询和更新。作为先决条件,你首先需要用java.sql.DriverManger类建立一个数据库连接。连接的建立要花费很长的时间,因此,在强事务环境中,比如一个WEB服务器,只要可能你就想要重用连接。这样的重用称为connection pooling。

如果你的JDBC技术已经生疏了,在例子Listing 1中代码片段说明了怎样建立数据库连接,用连接创建statement对象,发送SQL查询,处理结果,以及释放JDBC资源。

Listing 1.Simple JDBC code Connection connection = DriverManager.getConnection(URL, user, password); Statement statement = connection.createStatement(); ResultSet results = statement.executeQuery(sqlQuery); while (results.next()) { ... process query results ... logSQLWarnings(results.getWarnings()); } results.close(); statement.close(); connection.close(); 在现实生活中,JDBC代码没有这么简单;异常和警告情况需要处理。例子

Listing 2 是相同的JDBC例子但是增加了JDBC异常和警告的处理。在这个例子中,异常和警告是简单和笨拙的,在异常情况下,我们终止操作。可是,dinally{}子句确保了资源的释放。

在这里仅仅暗示实际的处理结果。我们将在本文的后面找到更详细的内容。如果我们正在执行一个数据库更新而不是查询,我们就应该用下面的代码来替换while循环的内容:

int count = statement.executeUpdate(sqlUpdate);

executeUpdate方法返回更新语句所影响的行数。如果这些代码看起来不

除了executeQuery()和executeUpdate()之外,类Statement 支持一般的execute()方法。这就允许编辑一般的SQL代码,尽管处理的结果复杂很多。 熟悉,你也许想花更

多的时间来回顾一些关于JDBC的指南信息,在资源章节可以找到。

2.2 在JSP页面中使用JDBC

为了来自数据库的动态内容,我们应该怎样结合JDBC和JSP技术。 一般的规则是,好的JSP实践经验建议我们把表示模式和行为模式分离开来。这类似于在OO编程中的模型-视图-控制器(MVC)范例。这样分离的一个原因是在程序员创建的基于JSP技术的应用可能包含了模型和控制器组件,然而,视图组件是在页面设计器里编辑的。在JSP应用体系结构下,视图的角色决定了它的职责是描述,并只在JSP页面中被处理。控制器的角色是响应请求,往往扮演着servlet的角色,并且多数的JSP开发者渐渐地对在控制器角色里使用JSP页面的优越性达成了共识。模型的角色是对应用实体的行为进行建模,它典型的表现在JavaBeans组件上。

除了决定数据库在MVC范例中对应的位置之外,你有好几种在JSP页面中整合JDBC技术的选择。例如,你可以用脚本插入JDBC,用库标签插入,或把它隐藏在定制的标签或其它类中。

我们下面将看到几个不同途径的例子并讨论它们的使用方法。

2.3 一个JSP scriptlet的例子

一个新的JSP程序员很可能做的第一件事就是写一个scriptlet来访问JDBC。或许它在一些地方象在Listing 3中的那个在页面中用JDBC实现\counter\的例子。(这页的一个生动的版本是在JSP开发者指南的WEB站点上。) Listing 3 JSP page using JDBC in a scriptlet

Class.forName(\Connection connection = DriverManager.getConnection(\Statement statement = connection.createStatement(); int changed = statement.executeUpdate(\ \if (changed == 0) statement.executeUpdate(\ request.getRequestURI() + \ResultSet rs = statement.executeQuery(\ request.getRequestURI() + \rs.next(); int hitCount = rs.getInt(1); statement.close(); connection.close(); JDBC scriptlet example

This page has been hit hitCount times. The page counter is implemented by a JSP scriptlet calling the JDBC package directly.

这页包含了一个scriptlet(前面突出的部分),它连接数据库,创建statement,以及尝试更新由页面URI键入的纪录。如果更新不影响任何行,这个例子中假定没有这样的行并新增一行。最后,这个scriptlet查询数据库当前命中的数并赋值给

一个本地变量。更进一步,在这个JSP页面的描述部分,突出的JSP表达式被用来传递上面的值。

尽管功能正确,但这个JSP页面仍有几个问题。首先这个scriptlet并不是一个无程序页面设计师会先看到的。坦白地,甚至使程序员也不想在页面中看到这样的东西。第二,页面

注意:你不可能像这样来执行一个hit counter .为每次请求改变数据库的代价是必不可少的。无论如何, 这个hit counter都提供了一个查询和更新数据库的简单的例子,这说明我们可以用各种手段把你的JSP与JDBC页整合起来. 缺少了异常处理,那可是真实的JDBC代码必不可少的部分。第三,hit counter的执行是逐字逐句地植入的,因此任何改动都需要传播到包含hit counter 的每个JSP页面。

因此,我们该如何装配这个JSP页面。一个再三提到的方法是用库标签来除去scriptlet。在我们的下一个例子中,将看到这种可选择的解决方案。

2.4 一个用DBTags的库标签例子

一个初学JSP的程序员最先听到的事,经常是来自朋友和专家的关于不要使用scriptlet的建议。相反,他们建议你用定制的标签。定制的标签是一种手段,通过它可扩张JSP平台:定制XML风格的标签,依靠代码库,实现渴望的功能。我们将在下一个例子中,它们工作得多么良好。

Jakarta 库标签工程是Jakarta工程的一个子工程,正式实施的范围是Java Servlet和JSP 技术。

一个由Jakarta 库标签工程赞助发展的包就是DBTags定制标签库。(从前叫做JDBC标签库)。在Listing 4中的例子实现了和Listing 3中相同的hit counter,仅仅用定制标签代替了scriptlet Listing 4. JSP page using DBTags Jakarta DBTags example <%@ taglib uri=\<%-- open a database connection --%>