使用JSP技术和JDBC技术访问基于Web的动态数据(2)

来源: 作者: 2007-11-21 出处:pcdog.com

java  jsp  mysql  解决方案  数据库  

  使用JSP技术和JDBC技术访问基于Web的动态数据(2)

· JDBC 用于 JSP 页面

那么我们怎样结合使用 JDBC 和 JSP 技术才能使我们的动态内容来自数据库呢?

作为一条普遍的法则,良好的 JSP 惯例建议您应当把表示同模式行为分离。这与面向对象编程中的“模式-视图-控制器(MVC)”范例类似。分离原因之一是,基于 JSP 技术的应用很可能由程序员编写“模式(Model)”和“控制器(Controller)”组件,而由页面设计人员编写“视图(View)”组件。就 JSP 应用体系结构而言,负责表示的“视图”角色由 JSP 页面处理。负责对请求做出响应的“控制器”的角色通常由 servlet 担当,但许多 JSP 用户开始认识到用 JSP 页面来担任“控制器”的角色的优点。“模式”这一角色负责为应用实体的行为构建模式,典型情况下由 JavaBean 组件来担当。

除确定在 MVC 范例中的何处同数据库交互之外,关于在 JSP 页面中集成 JDBC 技术您有多种选择。例如,您可以使用 scriptlet 插入 JDBC 或使用标记库插入,还可以把它隐藏在定制标记或其它的类里。接下来我们要看看一些方式的示例并讨论其用法。

· JSP scriptlet 示例
JSP 程序员新手有可能做的第一件事是写一个 scriptlet 来访问 JDBC。也许写出来的这个 scriptlet 象清单 3 中的示例一样使用 JDBC 来实现该页面的“点击计数器”。(这个页面的实际版本位于 JavaServer Page Developers Guide Web 站点上)

清单 3. JSP 页面通过 scriptlet 使用 JDBC

<jsp:directive.page import="java.sql.*" />
<jsp:scriptlet>
Class.forName("org.gjt.mm.mysql.Driver");
Connection connection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "", "");
Statement statement = connection.createStatement();
int changed =
statement.executeUpdate("update counters set hitCount = hitCount + 1 " +
"where page like ´" + request.getRequestURI() + "´");
if (changed == 0) statement.executeUpdate("insert counters(page) values(´" +
request.getRequestURI() + "´)");
ResultSet rs =
statement.executeQuery("select hitCount from counters where page like ´" +
request.getRequestURI() + "´");
rs.next();
int hitCount = rs.getInt(1);
statement.close();
connection.close();
</jsp:scriptlet>

<HTML>
<HEAD>
<T99vLE>JDBC scriptlet example</T99vLE>
</HEAD>
<BODY>

<P>This page has been hit
<jsp:expression>hitCount</jsp:expression>
times. The page counter is implemented by a JSP scriptlet calling
the JDBC package directly.</P>

</BODY>
</HTML>

该页面中有一个 scriptlet(高亮的第一部分)连接到数据库、创建 statement(语句)并试图对一个以页面的 URI 为主键的计数器记录进行更新。如果更新没有对任何行起作用,那么这个示例就假定没有这样的记录并添加一条。最后,这个 scriptlet 查询数据库中当前点击计数并把结果赋给一个局部变量。继续往下看,这个 JSP 页面的“表示”部分中高亮的 JSP 表达用于显示点击计数器的值。

:您也许不希望真的以这种方式实现点击计数器。为每一次请求而更新数据库的开支是不必要的开销。但是,我们可以用点击计数器这个对数据库进行更新和查询的简单示例来说明在您的 JSP 页面中集成 JDBC 的各种途径。
尽管 JSP 页面能起作用,但它有许多问题。首先,不编程的页面设计者不会希望在页面中看到 scriptlet。坦白的讲,连程序员也不会希望在页面中有这类内容,因为它使页面的实际内容变得杂乱。第二,为简化示例,这个页面缺少异常处理,而这个异常处理应该是实际的 JDBC 代码中的一部分。第三,点击计数器的实现的确是嵌在 JSP 页面里的,因此对点击计数器的任何更改都需复制到使用点击计数器的每个 JSP 页面。

那么我们怎样修改这个 JSP 页面呢?一种常用的解决方案是使用标记库换掉 scriptlet。在下一个示例中,我们会看一下这种可选择的解决方案。

(未完待续)
更多内容请看PCdog.com--jsp文摘专题
上一篇:使用JSP技术和JDBC技术访问基于Web的动态数据(1)
下一篇:使用自定义标签,将结果集返回到jsp页面!(推荐方法)