引言 您可能会很吃惊地发现 JDeveloper 10g 实际上包含了广泛流行的 JavaServer 页面标准标签库 (JSTL)。这意味着有可能在 JDeveloper 内直接灵活地使用 JSTL,而不需要您单独下载 JSTL 并安装到您的环境中。JDeveloper 10g 的可视化环境还使得使用 JSTL 变得轻而易举。
以下方法说明了如何在 JDeveloper 10g 的可视化开发环境中使用 JSTL SQL 标签。
JDeveloper 中的基础 JSTL SQL 在开始之前,首先务必从 OTN 下载 JDeveloper 10g 预览版。您还需要对数据库进行访问。在这个示例中将使用 Oracle 数据库,但您可以将任意适应 SQL92 的数据库和 JDeveloper 一起使用。
在 JDeveloper 中,创建一个新的应用程序工作区。File->New->General->Workspaces->Application Workspace。
您可以将您的应用程序命名为:"jstl_sql"。
程序包前缀也可以是 "jstl_sql" — (非必需的)
设置 "Application Template" 为 "Custom Application [All Technologies]"。将创建单个项目(模型),这就是我们所需的全部,因为我们将不需要为这个示例创建基于 MCV 的应用程序。
一旦创建了工作区和启动项目,请创建一个新的 JSP。File->New->Web-Tier->JavaServer Pages->JSP Page。
可以将之命名为“jstl_fun.jsp”。
一旦创建了 JSP,请随便在页面顶部添加一个标题,如 "JSTL SQL FUN"。提示:使用工具条将文本设置位为 格式。
在右侧,您将需要在组件选项板中选择 "JSTL SQL"。(参见下面的红色箭头。)
现在我们可以开始将 JSTL SQL 标签拖放到 JSP 页面上。
利用 JSTL SQL,您可以通过将一个"SetDataSource" 标签拖放到您的页面上来定义一个新的基于页面的“数据源”。(红色箭头)
一旦它出现在页面上,您将可以在右下角的属性检查器 (Property Inspector) 中编辑它的属性。(蓝色箭头)
当您在属性检查器中单击 "dataSource" 时,您将注意到您能够单击一个按钮来定义一个新的连接或使用一个现有的连接。注意:JDeveloper 在“连接管理器”中集中管理所有的数据库连接。
如果您需要定义一个新的连接,请在 dataSource 对话框中单击 "New.."。
一旦定义了数据库连接信息,您将需要把 "var" 属性设为 "empds"。这是与数据源相连的变量名:
(注意:通过设置数据源,我们将已设置了用户、口令、url 等。作为一种选项,您也可以单独设置这些属性。)
应当指出的是直接在页面中定义数据源将仅用于原型构建或小型非安全性应用程序。对于生产应用程序,您一定要隐藏连接信息。这可以通过在 web.xml 中定义一个上下文参数来实现。这种引用也适用于 JDBC url 或一个现有的容器管理的 JNDI 数据源。配置 JNDI 数据库是容器所特有的,这超出了本文的范围,但在 web.xml 中引用数据源在 JDeveloper 中也可以很容易地实现。操作方法如下:
打开 web.xml "Settings..." 对话框。
然后为 javax.servlet.jsp.jstl.sql.dataSource 输入一个上下文参数。
在 value: 字段中,您可以输入一个 JDBC URL 或容器中定义的一个 JNDI 数据源。在本例中,我将只使用 JDBC。
现在我们已经说明了如何访问数据源,现在我们创建一个查询。为了实现这个目的,我们将一个 Query 标签拖放到页面上。在属性检查器中设置以下属性:
var: Emp
dataSource:${empds}
在查询标签的正文(标签右侧的一个白色的小方块)中,输入一个简单的查询:"select * from emp"。(注意:不要包含分号 ;)
(注意:标签容器在可视编辑器中用一个实心长方形显示。)
现在我们已经定义了数据,我们可以使用 JSTL Core 标签来显示数据了。在本例中,我们将使用 JSTL Core:"Foreach" 和 "Out" 标签。修改组件选项板,以显示 "JSTL Core" 标签。
拖放一个 "Foreach" 标签到页面上。按以下方式设置属性:
items: ${emp.columnNames}
var:columnName
在 Foreach 标签内,插入一个 "Out" 标签,并按以下方式进行设置:
value: ${columnName}
这时您应当能够进行测试了。运行 JSP,查看一个列的列表。(在导航器中右键单击 JSP,然后选择 "Run jstl_fun.jsp")
现在,让我们利用 JSTL 和 HTML 再增加一些代码来显示数据库表的全部内容。为此,您可以拷贝并将以下代码粘贴到您的 JSP 的源代码中。要访问您的 JSP 的源代码视图,请单击页底的 "Code" 标签。
现在拷贝并粘贴以下代码:(注意:这可能替换您现有的 Foreach 语句。)
<table border="1" >
<%-- Get the column names for the header of the table --%>
<c:forEach var="columnName" items="${emp.columnNames}">
<th><c:out value="${columnName}"/></th>
</c:forEach>
<%-- Get the value of each column while iterating over rows --%>
<c:forEach var="row" items="${emp.rowsByIndex}">
<tr>
<c:forEach var="column" items="${row}">
<td><c:out value="${column}"/></td>
</c:forEach>
</tr>
</c:forEach>
</table>
一旦您将这些代码粘贴到了源代码中,单击 "Design" 标签,查在可视编辑器中是如何显示的。
保存并重新运行 JSP。您只需在浏览器中单击刷新来查看结果:
JDeveloper 中的 JSTL SQL 的更多例子
现在我们已经逐步说明了如何查询和显示数据,现在我们可以试验更高级的事务处理了。幸运的是,在 OTN 上已经有了一篇关于如何进行这些事务处理的教程。从 OTN 上查看原来的 JSTL SQL 示例。
为了试验本示例中的更高级的代码,请首先创建一个新的 JSP。
现在从旧的 JSTL SQL 示例中拷贝并粘贴示例代码。在运行代码之前,您将必须定制数据源属性。此外,您的用户帐号将需要创建权限。
页面在 JDeveloper 中应当表现为:
右键单击并运行新的 JSP,以查看它是否正常工作!
总结 正如您所看到的,利用 JSP 和 JSTL SQL 进行数据库开发在 JDeveloper 10g 的可视化开发环境中得到了大大地简化。