NetBeansIDE6.8/6.9教程-使用MySQL数据库创建简单的Web应用程序

本文档描述了如何创建用于连接 MySQL 数据库服务器的简单 Web 应用程序。还讲述了 Web 开发中的 一些基本概念和技术,例如 JavaServer Pages (JSP)、JavaServer Pages 标准标记库 (JavaServer Pages Standard Tag Library, JSTL)、Java 数据库连接 (Java Database Connectivity, JDBC) API 和 两层的客户端-服务器体系结构。本教程是为对 Web 开发有基本了解并且期望使用 MySQL 数据库来应用 其知识的初学者设计的。

MySQL 是一种常见的开源数据库管理系统,由于其速度、灵活性和可靠性而常用于 Web 应用程序中。 MySQL 使用 SQL(即 Structured Query Language,结构化查询语言)访问和处理数据库中包含的数据。

本教程是连接 MySQL 数据库教程的续篇,而且假定您已创建了名为 MyNewDatabase 的 MySQL 数据库 ,并已在 NetBeans IDE 中为其注册了连接。该教程中使用的表数据包含在 ifpwafcad.sql 中,本教程 也需要使用此数据。此 SQL 文件创建了两个表(Subject 和 Counselor),然后将样例数据填入这两个 表中。如果需要,将此文件保存至您的计算机中,然后在 NetBeans IDE 中将其打开并在名为 MyNewDatabase 的 MySQL 数据库中运行该文件。

目录

规划结构

创建新项目

± 准备 Web 界面

设置欢迎页

创建响应页

创建样式表

± 准备 应用程序和数据库之间的通信

设置 JDBC 数据源和连接池

从应用程序引用数据源

将数据库驱动 程序的 JAR 文件添加到服务器

± 添加动态逻辑

将 JSTL 库添加到项目的类路径中

实现 JSTL 代码

运行完成的应用程序

要学习本教程,您需要具备以下软件和资源。

软件或资源 要求的版本

NetBeans IDE,Java 包 6.8 或 6.9 Java Development Kit (JDK) 6 MySQL 数据库服务器 5.1 MySQL ConnecTor/J JDBC 驱动程序 版本 5.x GlassFish 服务器 3

注意:

使用 NetBeans IDE 的 Java 下载包,可以安装 GlassFish 服务器。您需要 GlassFish 服务器才能 学完本教程。

Java 平台与 MySQL 数据库协议之间的通信所需的 MySQL ConnecTor/J JDBC 驱动程序 包含在 NetBeans IDE 中。

如果需要将项目与工作解决方案进行比较,可以下载样例应用程序。

规划结构

简单的 Web 应用程序可以使用两层体系结构进行设计,其中客户端可以直接与服务器通 信。在本教程中,Java Web 应用程序使用 Java 数据库连接 API 直接与 MySQL 数据库通信。实际上, 正是 MySQL ConnecTor/J JDBC 驱动程序实现了应用服务器(GlassFish 服务器)识别的 Java 代码与任 何 SQL(数据库服务器 (MySQL) 识别的语言)内容之间的通信。

您在本教程中构建的应用程序需要创建两个 JSP 页。在每个页面中,您将使用 HTML 和 CSS 来实现 简单接口,并应用 JSTL 技术来执行直接查询数据库以及将检索到的数据插入这两个页面的逻辑。两个数 据库表(Subject 和 Counselor)包含在 MySQL 数据库 MyNewDatabase(该数据库是通过学完连接 MySQL 数据库教程创建的)中。以下面的两层方案为例。

欢迎页面 (index.jsp) 向用户展示了简单的 HTML 表单。当浏览器请求 index.jsp 时,该页面内的 JSTL 代码会启动对 MyNewDatabase 的查询。它会从 Subject 数据库表中检索数据,然后先将该数据插 入到页面中,再将页面发送至浏览器。当用户在欢迎页面的 HTML 表单中提交其选择时,该提交会启动对 响应页 (response.jsp) 的请求。同样,该页面内的 JSTL 代码会启动对 MyNewDatabase 的查询。这次 ,它会同时从 Subject 和 Counselor 表中检索数据,并将该数据插入到页面中,以便允许用户在页面返 回到浏览器时查看基于其选择的数据。

为了实现上述方案,您将为一个假想的组织 IFPWAFCAD(即 International Former Professional Wrestlers’ Association for Counseling and Development,国际前职业摔跤咨询与发展协会)开发一 个简单的应用程序。

index.jsp

创建新项目

首先,在 IDE 中创建一个新的 Java Web 项目:

从主菜单中,选择“文件”>“新建项目”(Ctrl-Shift-N 组合键;在 Mac 上为 &#8984- Shift-N 组合键)。选择 “Java Web” 类别,然后选择“Web 应用程序”。

使用“新建项目”向导,可以在标准 IDE 项目中创建空的 Web 应用程序。标准项目使用 IDE 生成的 Ant 生成脚本来编译、部署和运行应用程序。

单击“下一步”。

在“项目名称”中,输入 IFPWAFCAD。同时,指定项目在计算机上的位置。(缺省情况下,IDE 会将项目置于 home 目录下的 NetBeansProjects 文件夹中。)

单击“下一步”。

在步骤 3“服务器和设置”中,指定 GlassFish 服务器作为用于运行应用程序的服务器。

注意:如果您安装了 NetBeans IDE 的 Java 版本,则 GlassFish 服务器会显示在“服务器”下拉字 段中。由于 GlassFish 服务器包含在下载中,因此会在 IDE 中自动进行注册。如果要对此项目使用其他 服务器,请单击位于“服务器”下拉字段旁边的“添加”按钮,然后在 IDE 中注册其他服务器。但是, 使用 GlassFish 服务器之外的服务器不在本教程的讲述范围之内。

在“Java EE 版本”字段中,选择 “Java EE 5″。

Java EE 6 Web 项目不需要使用 web.xml 部署描述符,且 NetBeans 项目模板不在 Java EE 6 项目 中包含 web.xml 文件。但是,本教程介绍了如何在部署描述符中声明数据源,此操作不依赖于任何特定 于 Java EE 6 的功能,因此可以将项目版本设置为 Java EE 5。

注意:您同样可以将项目版本设置为 Java EE 6,然后创建 web.xml 部署描述符。(从“新建文件” 向导中选择 “Web” 类别,然后选择“标准部署描述符”。)

单击“完成”。IDE 将为整个 应用程序创建一个项目模板,并在编辑器中打开一个空的 JSP 页 (index.jsp)。index.jsp 充当应用程 序的欢迎页面。新项目是根据 Sun Java BluePrints 准则构建的。

准备 Web 界面

首先,准备欢迎页 (index.jsp) 和响应页 (response.jsp)。欢迎页实现用于捕获 用户数据的 HTML 表单。这两个页面都实现 HTML 表,从而以结构化的方式显示数据。在此部分,您也可 以创建样式表,以便增强两个页面的外观。

设置欢迎页

创建响应页

创建样式表

设置欢迎页

确保 index.jsp 在编辑器中处于打开状态 。如果该页面尚未打开,请从“项目”窗口的 “IFPWAFCAD” >“Web 页”双击 index.jsp 。

在编辑器中,将 标记之间的文本更改为:IFPWAFCAD Homepage。</p> <p>将 标记之间的文本更改为:”Welcome to IFPWAFCAD, the International Former Professional Wrestlers’ Association for Counseling and Development!”。</p> <p>通过从主菜单中选择“窗口” >“组件面板”(Ctrl-Shift-8 组合键;在 Mac 上为 &#8984-Shift-8 组合键)打开 IDE 的组 件面板。将指针悬停在 “HTML” 类别中的“表”图标上,并注意为该项显示的缺省代码片段。</p> </p> <p>您可以根据自己的喜好配置“组件面板”- 在“组件面板”中单击鼠标右键并选择“显示大图 标”和“隐藏项名称”可使其显示上图所示的内容。</p> <p>将光标指针放在紧靠 标记后面的位 置。(该位置即是您要实现新的 HTML 表的位置。)然后,在“组件面板”中双击“表”图标。</p> <p>在显 示的“插入表”对话框中,指定以下值,然后单击“确定”。</p> <p>行数:2</p> <p>列数:1</p> <p>边框大小: 0</p> <p>此时会生成 HTML 表代码并已添加到您的页面中。</p> <p>将以下内容添加到表标题和第一个表行的单元 格中(新内容以粗体显示):</p> <pre><table border="0"> <thead> <tr> <th><strong>IFPWAFCAD offers expert counseling in a wide range of fields.</strong></th> </tr> </thead> <tbody> <tr> <td><strong>To view the contact details of an IFPWAFCAD certified former professional wrestler in your area, select a subject below:</strong> </td> </tr></pre> </p> <p>在底部的表行中,插入一个 HTML 表单。为此,请将光标放在第二对 标记之间,然后双 击“组件面板”中的 HTML 表单 () 图 标。在“插入表单”对话框的“操作”文本字段中,键入 response.jsp,然后单击“确定”。</p> </p> <p>在 </p> <pre><tr> <td> <form. action="response.jsp"> <strong><strong>Select a subject:</strong></strong> </form> </td></tr></pre> <p>使用 IDE 的代码完成支持同样可以访问“组件面板”中列出的所有项。要在编辑器中工作时使用代码 完成,可以按 Ctrl-空格键。下面的两个步骤演示了如何使用代码完成添加下拉列表和提交按钮。</p> <p>在编辑器中,按 Enter 键在刚添加的内容后面添加一个空行,然后按 Ctrl-空格键以调用 IDE 的代 码完成支持。</p> </p> <p>选择“下拉列表”。</p> <p>在所显示的“插入下拉列表”对话框的“名称”文本字段中键入 subject_id ,然后单击“确定”。请注意,下拉列表的代码片段会添加到表单中。</p> <p>下拉列表的选项数目当前并不 重要。稍后,我们将在本教程中添加动态生成选项(基于从 Subject 数据库表收集的数据)的 JSTL 标 记。</p> <p>将提交按钮项 () 添加到紧靠刚添加的下拉列表后面的位置。可以使用“组件面板”执行此操作 ,也可以调用编辑器的代码完成(如上一步中所述)。在“插入按钮”对话框的“标签”和“名称”字段 中均输入 submit,然后单击“确定”。</p> <p>要设置代码的格式,请在编辑器中单击鼠标右键,然后选择“ 格式化”(Alt-Shift-F 组合键;在 Mac 上为 Ctrl-Shift-F 组合键)。系统会为您的代码自动设置格 式,并且类似于以下内容:</p> <pre><body> <h2>Welcome to <strong>IFPWAFCAD</strong>, the International Former Professional Wrestlers' Association for Counseling and Development! </h2> <table border="0"> <thead> <tr> <th>IFPWAFCAD offers expert counseling in a wide range of fields.</th> </tr> </thead> <tbody> <tr> <td>To view the contact details of an IFPWAFCAD certified former professional wrestler in your area, select a subject below: </td> </tr> <tr> <td> <form. action="response.jsp"> <strong>Select a subject:</strong> <select name="subject_id"> <option></option> </select> <input type="submit" value="submit" name="submit" /> </form> </td> </tr> </tbody> </table></body></pre> <p>要在浏览器中查看此页面,请在编辑器中单击鼠标右键,然后选择“运行文件”(Shift-F6 组合键; 在 Mac 上为 Fn-Shift-F6 组合键)。在您执行此操作时,JSP 页面会自动进行编译并部署到您的服务器 中。IDE 会打开缺省浏览器以便从页面的部署位置显示该页面。</p> </p> <p>创建响应页</p> <p>为了准备 response.jsp 的界面,您必须首先在项目中创建文件。请注意,此页 面中显示的大部分内容都是使用 JSP 技术自动生成的。因此,在以下步骤中添加占位符,稍后将替换为 JSP 代码。</p> <p>在“项目”窗口中右键单击 IFPWAFCAD 项目节点,然后选择“新建”>“JSP”。“新 建 JSP 文件”对话框打开。</p> <p>在 JSP“文件名”字段中,输入 response。请注意,当前为“位置”字 段选择了“Web 页”,这表示将在项目的 web 目录中创建该文件。此目录同样是 index.jsp 欢迎页驻留 的位置。</p> <p>接受任何其他缺省设置,然后单击“完成”。新的 response.jsp 页面模板生成,并在编辑 器中打开。新的 JSP 节点还会在“项目”窗口的“Web 页”下显示。</p> </p> <p>在编辑器中,将标题更改为:IFPWAFCAD – {placeholder}。</p> <p>删除 标记之间的 Hello World! 一行,然后复制下面的 HTML 表并将其粘贴到页面主体中:</p> <pre><table border="0"> <thead> <tr> <th colspan="2">{placeholder}</th> </tr> </thead> <tbody> <tr> <td><strong>Description: </strong></td> <td><span style="font-size:smaller; font-style.:italic;">{placeholder}</span></td> </tr> <tr> <td><strong>Counselor: </strong></td> <td>{placeholder} <br> <span style="font-size:smaller; font-style.:italic;"> member since: {placeholder}</span> </td> </tr> <tr> <td><strong>Contact Details: </strong></td> <td><strong>email: </strong> <a href="mailto:{placeholder}">{placeholder}</a> <br><strong>phone: </strong>{placeholder} </td> </tr> </tbody></table></pre> </p> <p>要在浏览器中查看此页面,请在编辑器中单击鼠标右键,然后选择“运行文件”(Shift-F6 组合键; 在 Mac 上为 Fn-Shift-F6 组合键)。此时编译该页面,将其部署到 GlassFish 服务器,并在缺省浏览 器中将其打开。</p> </p> <p>创建样式表</p> <p>创建简单的样式表,以便增强 Web 界面的显示。本教程假定您 了解样式规则的作用方式,以及它们影响 index.jsp 和 response.jsp 中相应 HTML 元素的方式。</p> <p>通过在 IDE 的主工具栏中按“新建文件”() 按钮 ,打开“新建文件”向导。选择 “Web” 类别,然后选择“层叠样式表”并单击“下一步”。</p> <p>键入 style. 作为 CSS 文件名,并单击“完成”。IDE 会创建一个空 CSS 文件,并将其放置在 index.jsp 和 response.jsp 所在的同一个项目位置。请注意,style.css 的节点现在显示在“项目”窗 口的项目中,并且该文件在编辑器中打开。</p> <p>在编辑器中,将以下内容添加到 style.css 文件中:</p> <pre>body {font-family: Verdana, Arial, sans-serif;font-size: smaller;padding: 50px;color: #555;}h1 { text-align: left; letter-spacing: 6px; font-size: 1.4em; color: #be7429; font-weight: normal; width: 450px; }table { width: 580px; padding: 10px; background-color: #c5e7e0; }th { text-align: left; border-bottom: 1px solid; }td { padding: 10px; }a:link { color: #be7429; font-weight: normal; text-decoration: none; }a:link:hover { color: #be7429; font-weight: normal; text-decoration: underline; }</pre> </p> <p>样式表链接到 index.jsp 和 response.jsp。在这两个页面中,将以下行添加到 标记之间:</p> </p> <p>要在编辑器中打开的文件之间快速导航,请按 Ctrl-Tab 组合键,然后选择所需的文件。</p> <p>NetBeans CSS 支持</p> <p>在 IDE 中使用 CSS 时,可以利用 CSS 样式生成器和 CSS 预览。这些工具可 以在创建样式规则和查看与样式属性结合使用的元素时,提供广泛的支持。</p> <p>例如,将光标置于 style.css 的 h1 规则中,然后打开“CSS 预览”(“窗口”>“其他”>“ CSS 预览”):</p> </p> <p>CSS 预览会演示元素在浏览器中的呈现方式。另请注意,预览会在您对规则进行更改时自动刷 新,从而在 IDE 中提供样式元素的实时文本表示。</p> <p>准备应用程序和数据库之间的通信</p> <p>在服务器 与数据库之间实现通信的最有效方式是设置数据库连接池。为每个客户端请求创建新连接会非常耗时,对 于连续接收大量请求的应用程序尤其如此。为了改变这种情况,会在连接池中创建和维护大量的连接。任 何需要访问应用程序数据层的传入请求将使用池中已创建的连接。同样,当请求完成时,连接不会关闭, 但是会返回到连接池。</p> <p>为服务器准备数据源和连接池后,您需要指示应用程序使用数据源。这通常通过在应用程序的 web.xml 部署描述符中创建一个条目来完成。最后,您需要确保服务器可以访问数据库驱动程序(MySQL ConnecTor/J JDBC 驱动程序)。</p> <p>重要说明:从现在起,您需要确保已设置名为 MyNewDatabase 的 MySQL 数据库实例,并且该实例包 含 ifpwafcad.sql 中提供的样例数据。此 SQL 文件创建了两个表(Subject 和 Counselor),然后将样 例数据填入这两个表中。如果您尚未执行此任务,或者在执行此任务时需要帮助,请参见连接 MySQL 数 据库,然后再继续操作。</p> <p>此外,您的数据库需要受口令保护才能在本教程中创建数据源和使用 GlassFish 服务器。如果您使用 的是缺省 MySQL root 帐户和空口令,则可以通过命令行提示符设置口令。</p> <p>本教程使用 nbuser 作为示例口令。要将口令设置为 nbuser,请在命令行提示符下导航至 MySQL 安 装的 bin 目录,然后输入以下内容:</p> <pre>shell> mysql -u rootmysql> UPDATE mysql.user SET Password = PASSWORD('nbuser') -> WHERE User = 'root';mysql> FLUSH PRIVILEGES;</pre> <p>有关详细信息,请参见正式的 MySQL 参考手册:《确保初始 MySQL 帐户安全》。</p> </p> <p>设置 JDBC 数据源和连接池</p> <p>从应用程序引用数据源</p> <p>将数据库驱动程序的 JAR 文件添加到服务器</p> <p>设置 JDBC 数据源和连接池</p> <p>GlassFish Server Open Source Edition 包含数据库连接池 (Database Connection Pooling, DBCP) 库,该库为作为开发者的您提供了透明的连接池功能。要利用该功能,需要为应用程序 可以用于连接池的服务器配置 JDBC(Java Database Connectivity,Java 数据库连接)数据源。</p> <p>有关 JDBC 技术的详细信息,请参见 Java 教程:JDBC 基础知识。</p> <p>您可以直接在 GlassFish 服务器管理控制台中配置数据源,也可以按照下面所述,在 sun- resources.xml 文件中声明应用程序所需的资源。部署应用程序时,服务器在资源声明中读取内容,然后 创建所需的资源。</p> <p>下面的步骤介绍了如何声明连接池以及依赖于连接池的数据源。使用 NetBeans“JDBC 资源”向导, 可以执行这两个操作。</p> <p>通过在 IDE 的主工具栏中按“新建文件”() 按钮 ,打开“新建文件”向导。选择 “GlassFish” 服务器类别,然后选择“JDBC 资源”并单击“ 下一步”。</p> <p>在步骤 2“常规属性”中,选择“创建新的 JDBC 连接池”选项,然后在“JNDI 名称”文 本字段中键入 jdbc/IFPWAFCAD。</p> </p> <p>JDBC 数据源依赖于 JNDI(Java Naming and DirecTory Interface,Java 命名 和目录接口)。JNDI API 为应用程序查找和访问数据源提供了统一的方式。有关详细信息,请参见 JNDI 教程。</p> <p>(可选)为数据源添加描述。例如,键入:Accesses the database that provides data for the IFPWAFCAD application。</p> <p>单击“下一步”,然后再次单击“下一步”以跳过步骤 3“附加属性 ”。</p> </p> <p>在步骤 4 中,键入 IfpwafcadPool 作为 JDBC 连接池名称。确保“从现有连接中提取”选项已 选中,然后从下拉列表中选择 jdbc:mysql://localhost:3306/MyNewDatabase。</p> </p> <p>注意:该向导会检测已在 IDE 中设置的任何数据库连接。所以,此时您必须已创建 MyNewDatabase 数据库的连接。可通过打开“服务”窗口(Ctrl-5 组合键;在 Mac 上为 &#8984-5 组合键),并在 “数据库”类别下查找连接节点()验证已创建的连接。</p> <p>单击“下一步”。在步骤 5 中,请注意 IDE 将从上一步中指定的数据库连接中提取信息,并为新连 接池设置名称-值属性。</p> </p> <p>单击“完成”。该向导生成 sun-resources.xml 文件,其中包含数据源和所指定的连接池的相应条目 。</p> <p>在“项目”窗口的“服务器资源”中,可以打开新创建的 sun-resources.xml 文件,请注意,在 标记中已声明数据源和连接池包含您以前指定的值。</p> <p>要确认确实在 GlassFish 服务器中注册了新数据源和连接池,可以将项目部署到服务器中,然后在 IDE 的“服务”窗口中查找这些资源:</p> <p>在“项目”窗口中,右键单击 “IFPWAFCAD” 项目节点,然后选择“部署”。如果尚未运行 服务器,则会启动服务器;同时,会编译项目并将其部署到服务器。</p> <p>打开“服务”窗口(Ctrl-5 组 合键;在 Mac 上为 &#8984-5 组合键),然后展开“服务器”> GlassFish 服务器 >“资源 ”> “JDBC” >“JDBC 资源”和“连接池”节点。请注意,新数据源和连接池现在都已 显示:</p> </p> <p>从应用程序引用数据源</p> <p>您需要从 Web 应用程序引用刚配置的 JDBC 资源。为此,可以在应用程序 的 web.xml 部署描述符中创建一个条目。</p> <p>部署描述符是基于 XML 的文本文件,它包含了描述应用程序如何部署到特定环境的信息。例如,它们 通常用于指定应用程序上下文参数和行为模式、安全设置以及 Servlet、过滤器和侦听程序的映射。</p> <p>请执行以下操作,在应用程序的部署描述符中引用数据源。</p> <p>在“项目”窗口中,展开“配置文件”文件夹,然后双击 “web.xml”。IDE 的主窗口中将 显示该文件的图形界面。</p> <p>单击编辑器顶部的“引用”标签。展开“资源引用”标题,然后单击“添加 ”。“添加资源引用”对话框打开。</p> <p>对于“资源名称”,输入您在上面部分为服务器配置数据源时提 供的资源名称 (jdbc/IFPWAFCAD)。“描述”字段是可选的,但是您可以输入用户可读的资源描述,例如 Database for IFPWAFCAD application。</p> </p> <p>单击“确定”。新资源被添加在“资源引用”标题下面。</p> </p> <p>要验证该资源现在是否已添加到 web.xml 文件中,请单击编辑器顶部的 “XML” 标签。请 注意,现在包含了以下 标记:</p> <pre><resource-ref> <description>Database for IFPWAFCAD application</description> <res-ref-name>jdbc/IFPWAFCAD</res-ref-name> <res-type>javax.sql.dataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope></resource-ref></pre> </p> <p>将数据库驱动程序的 JAR 文件添加到服务器</p> <p>添加数据库驱动程序的 JAR 文件是使服务器能够与您 的数据库通信的另一个非常重要的步骤。通常,需要找到数据库驱动程序的安装目录,并将 mysql- connecTor-java-5.1.6-bin.jar 文件从驱动程序的根目录复制到您所使用的服务器的库文件夹中。幸运 的是,IDE 的服务器管理能够在部署时检测是否已添加了 JAR 文件,如果未添加,它会自动添加。</p> <p>要演示此过程,请打开“服务器”窗口(选择“工具”>“服务器”)。IDE 提供了一个 JDBC 驱 动程序部署选项。如果启用该选项,该选项会启动检查以确定服务器的部署应用程序是否需要任何驱动程 序。在 MySQL 中,如果需要驱动程序但又缺少该驱动程序,IDE 的捆绑驱动程序会部署到服务器的适当 位置中。</p> <p>选择“工具”>“服务器”以打开“服务器”窗口。在左窗格中选择 GlassFish 服务器。</p> <p>在主 窗格中,选择“启用 JDBC 驱动程序部署”选项。</p> </p> <p>在关闭该窗口之前,请记下“域文件夹”文本字段中指示的路径。在连接 IDE 中的 GlassFish 服务器时,实际上是连接到应用服务器的实例。每个实例均会在唯一的域中运行应用程序,“域名”字段 指示了服务器所使用的域名。如上图所示,驱动程序 JAR 文件应该位于 domain1 中,它是安装 GlassFish 服务器时创建的缺省域。</p> <p>单击“关闭”退出“服务器”窗口。</p> <p>在计算机上,导航至 GlassFish 服务器安装目录,并向下浏览到 domains > domain1 > lib 子文件夹。您应该已将 IFPWAFCAD 项目部署到服务器,因此应会看到 mysql-connecTor-java-5.1.6-bin.jar 文件。如果没有看 到驱动程序 JAR 文件,请执行下列步骤。</p> <p>将您的项目部署到服务器。在 IDE 的“项目”窗口中,从 项目节点的右键单击菜单中选择“部署”。在 IDE 的“输出”窗口中可以查看进度(Ctrl-4 组合键;在 Mac 上为 &#8984-4 组合键)。输出会提示 MySQL 驱动程序已部署到 GlassFish 服务器中的某个位 置。</p> </p> <p>现在,如果返回到计算机上的 domain1/lib 子文件夹,则会看到已自动添加了 mysql-connecTor- java-5.1.6-bin.jar 文件。</p> </p> <p>添加动态逻辑</p> <p>返回到在本教程前面创建的 index.jsp 和 response.jsp 占位符,您现在可以实现 JSTL 代码,通过该代码,页面可以动态生成内容(即,根据用 户输入)。为此,请执行以下三个任务。</p> <p>将 JSTL 库添加到项目的类路径中</p> <p>实现 JSTL 代码</p> <p>将 JSTL 库添加到项目的类路径中</p> <p>您可 以应用 JavaServer Pages 标准标记库 (JavaServer Pages Standard Tag Library, JSTL) 访问和显示 从数据库提取的数据。GlassFish 服务器在缺省情况下包含 JSTL 库。通过在“项目”窗口中展开 IFPWAFCAD 的“库”> GlassFish 服务器节点并搜索 jstl-impl.jar 文件,可以对此进行验证。缺省 情况下,GlassFish 服务器库会被添加到项目的类路径中,因此您不必为此任务执行任何步骤。</p> <p>JSTL 提供了四个基本功能区。它们是:</p> <p>core:常见的结构性任务,如处理流控制的迭代和条件</p> <p>fmt:国际化和本地化消息格式设置</p> <p>sql:简单数据库访问</p> <p>xml:处理 XML 内容</p> <p>本教程重点介绍 core 和 sql 标记库的使用。</p> <p>有关 JSTL 的详细信息,请参见 Java EE 5 教程第 7 章:JavaServer Pages 标准标记库。</p> <p>实现 JSTL 代码</p> <p>现在,您可以实现动态检索并显示每页数据的代码。两个页面需要您实现 SQL 查 询,以便利用在本教程前面所创建的数据源。</p> <p>IDE 提供了几个特定于数据库的 JSTL 代码片段,您可以从“组件面板”(Ctrl-Shift-8 组合键;在 Mac 上为 &#8984-Shift-8 组合键)中选择它们。</p> </p> <p>您也可以通过在编辑器中按 Ctrl-空格键访问组件面板的各项。键入 “db”,然后按 Ctrl- 空格键,可以过滤数据库项。</p> </p> <p>index.jsp</p> <p>要在 index.jsp 中动态显示表单的内容,您需要从 Subject 数据库表访问所有 name。</p> <p>将鼠标悬停在“组件面板”中的“数据库报告”项上。</p> </p> <p>“数据库报告”项使用 标记创建 SQL 查询,然后使用 标记对查询的 resultset 执行循环操作并输出检索到的数据。</p> <p>将光标置于 声明(第 7 行)上方,然后双击“组件面板”中的“数据库报告”项。在显示的 对话框中,输入以下详细信息:</p> <p>变量名称:subjects</p> <p>范围:page</p> <p>数据源:jdbc/IFPWAFCAD</p> <p>查询语句:SELECT subject_id, name FROM Subject</p> </p> <p>单击“确定”。在 index.jsp 文件中生成以下内容。(新内容以粗体显示。)</p> <pre><strong><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%></strong><%-- Document : index Created on : Dec 22, 2009, 7:39:49 PM Author : nbuser--%> <strong><sql:query var="subjects" dataSource="jdbc/IFPWAFCAD"> SELECT subject_id, name FROM Subject</sql:query> <table border="1"> <!-- column headers --> <tr> <c:forEach var="columnName" items="${subjects.columnNames}"> <th><c:out value="${columnName}"/></th> </c:forEach></tr><!-- column data --><c:forEach var="row" items="${subjects.rowsByIndex}"> <tr> <c:forEach var="column" items="${row}"> <td><c:out value="${column}"/></td> </c:forEach> </tr></c:forEach></table></strong> <%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></pre> </p> <p>请注意,IDE 自动添加了生成的内容中使用的 JSTL 标记( 和 )所需的 taglib 指令。taglib 指令声明 JSP 页使用定制(即,JSTL)标记,命名 用于定义这些标记的标记库,并指定其标记前缀。</p> <p>运行欢迎页以查看该页面在浏览器中的显示方式。在编辑器中单击鼠标右键,然后选择“运行文件” (Shift-F6 组合键;在 Mac 上为 Fn-Shift-F6 组合键)。</p> <p>该文件部署到 GlassFish 服务器,编译为 Servlet,然后呈现在缺省浏览器中。通过“数据库报告” 项生成的代码在欢迎页面中创建以下表格。</p> </p> <p>正如所看到的,通过“数据库报告”项,您可以快速测试数据库连接,并在浏览器 中查看数据库的表数据。这对于原型制作尤其有用。</p> <p>以下步骤演示了如何将生成的代码集成到您在本教程前面所创建的 HTML 下拉列表中。</p> <p>检查生成 的代码中的列数据。共使用了两个 标记;其中一个标记嵌套在另一个标记内。这导 致 JSP 容器(即,GlassFish 服务器)对所有表行执行循环,对于每行,可对其中的所有列执行循环操 作。以此方式显示整个表的数据。</p> <p>将 标记集成到 HTML 表单中,如下所示。根 据数据库中记录的数据,每项的值将变为 subject_id,输出文本将变为 name。(所做的更改以粗体显示 )。</p> <pre><form. action="response.jsp"> <strong>Select a subject:</strong> <select name="subject_id"> <strong><c:forEach var="row" items="${subjects.rowsByIndex}"> <c:forEach var="column" items="${row}"></strong> <option <strong>value="<c:out value="${column}"/>"</strong>><strong><c:out value="${column}"/></strong></option> <strong></c:forEach> </c:forEach></strong> </select> <input type="submit" value="submit" name="submit" /></form></pre> <p>将 标记集成到 HTML 表单中的更简单替代方法如下所示</p> <pre><form. action="response.jsp"> <strong>Select a subject:</strong> <select name="subject_id"> <strong><c:forEach var="row" items="${subjects.rows}"></strong> <option <strong>value="${row.subject_id}"</strong>><strong>${row.name}</strong></option> <strong></c:forEach></strong> </select> <input type="submit" value="submit" name="submit" /></form></pre> </p> <p>在两种情况下, 标记都会对 SQL 查询中的所有 subject_id 和 name 值执行循环 操作,并将每对值插入 HTML 标记中。在这种方式下,表单的下拉列表中会填入数据。</p> <p>删除通过“数据库报告”项生成的表。(删除的内容在下面以删除线文本显示。)</p> <pre><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%><%-- Document : index Created on : Dec 22, 2009, 7:39:49 PM Author : nbuser--%> <sql:query var="subjects" dataSource="jdbc/IFPWAFCAD"> SELECT subject_id, name FROM Subject</sql:query> <strong><strike><table border="1"> <!-- column headers --> <tr> <c:forEach var="columnName" items="${subjects.columnNames}"> <th><c:out value="${columnName}"/></th> </c:forEach></tr><!-- column data --><c:forEach var="row" items="${subjects.rowsByIndex}"> <tr> <c:forEach var="column" items="${row}"> <td><c:out value="${column}"/></td> </c:forEach> </tr></c:forEach></table></strike></strong> <%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></pre> <p>保存所做的更改(Ctrl-S 组合键;在 Mac 上为 &#8984-S 组合键),然后在编辑器中单击鼠标 右键并选择“运行文件”(Shift-F6 组合键)。请注意,浏览器中的下拉列表现在包含从数据库检索到 的主题名称:</p> </p> <p>response.jsp</p> <p>响应页面提供与欢迎页面中所选主题相对应的顾问详细信息。您创建的查询必 须选择符合以下条件的顾问记录:counselor_id 与所选主题记录中的 counselor_idfk 相匹配。</p> <p>将光标置于 声明(第 7 行)上方,键入 “db”,然后按 Ctrl-空 格键。选择“数据库查询”。(请参见上面显示的代码完成提示。)</p> <p>在显示的对话框中,输入以下详 细信息:</p> <p>变量名称:counselorQuery</p> <p>范围:page</p> <p>数据源:jdbc/IFPWAFCAD</p> </p> <p>查询语句: SELECT * FROM Subject, Counselor WHERE Counselor.counselor_id = Subject.counselor_idfk AND Subject.subject_id = ? </p> </p> <p>单击“确定”。在 response.jsp 文件中生成以下内容。(新内容以粗体显示。)</p> <pre><strong><%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%></strong><%-- Document : response Created on : Dec 22, 2009, 8:52:57 PM Author : nbuser--%> <strong><sql:query var="counselorQuery" dataSource="jdbc/IFPWAFCAD"> SELECT * FROM Subject, Counselor WHERE Counselor.counselor_id = Subject.counselor_idfk AND Subject.subject_id = ? <sql:param value="${param.subject_id}"/></sql:query></strong> <%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></pre> <p>请注意,IDE 自动添加了 标记所需的 taglib 指令。另请注意,您在查询中直接 使用了 标记。由于此查询依赖于从 index.jsp 提交的 subject_id 值,因此可以使 用 ${param.subject_id} 格式的 EL(Expression Language,表达式语言)语句提取值,然后将其传递 到 标记,以便在运行时可以使用该值替换 SQL 问号 (?)。</p> <p>使用 标记设置与查询所返回的 resultset 的第一个记录(即,行)相对应的变量。 (新内容以粗体显示。)</p> <pre><sql:query var="counselorQuery" dataSource="jdbc/IFPWAFCAD"> SELECT * FROM Subject, Counselor WHERE Counselor.counselor_id = Subject.counselor_idfk AND Subject.subject_id = ? <sql:param value="${param.subject_id}"/></sql:query> <strong><c:set var="counselorDetails" value="${counselorQuery.rows[0]}"/></strong></pre> <p>尽管查询所返回的 resultset 应仅包含一个记录,但此步骤非常有必要,因为页面需要使用 EL (Expression Language,表达式语言)语句访问记录中的值。回想一下,在 index.jsp 中,您使用 标记即可轻松访问 resultset 中的值。但是, 标记的操作方式 是通过为查询中包含的行设置变量,从而使您可以通过在 EL 语句中包含行变量来提取值。</p> <p>将 JSTL core 库的 taglib 指令添加到文件顶部,以便可以识别 标记。(新内容以 粗体显示。)</p> <pre><strong><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%></strong><%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%></pre> </p> <p>在 HTML 标记中,将所有占位符替换为 EL 语句代码,该代码显示 counselorDetails 变量中保存的 数据。(所做的更改在下面以粗体显示):</p> <pre><html> <head> <meta. http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <link rel="stylesheet" type="text/css" href="style.css"> <title><strong>${counselorDetails.name}</strong></title> </head> <body> <table> <tr> <th colspan="2"><strong>${counselorDetails.name}</strong></th> </tr> <tr> <td><strong>Description: </strong></td> <td><span style="font-size:smaller; font-style.:italic;"><strong>${counselorDetails.description}</strong></span></td> </tr> <tr> <td><strong>Counselor: </strong></td> <td><strong><strong>${counselorDetails.first_name} ${counselorDetails.nick_name} ${counselorDetails.last_name}</strong></strong> <br><span style="font-size:smaller; font-style.:italic;"> <em>member since: <strong>${counselorDetails.member_since}</strong></em></span></td> </tr> <tr> <td><strong>Contact Details: </strong></td> <td><strong>email: </strong> <a href="mailto:<strong>${counselorDetails.email}</strong>"><strong>${counselorDetails.email}</strong></a> <br><strong>phone: </strong><strong>${counselorDetails.telephone}</strong></td> </tr> </table> </body></html></pre> </p> <p>运行完成的应用程序</p> <p>现在,您已完成该应用程序。可以尝试再次运行它以查看其在浏览器中的显示 方式。请注意,由于 NetBeans 具备“在保存时编译”功能,因此您无需担心编译或重新部署应用程序的 问题。运行项目时,您可以确保部署包含您的最新更改。</p> <p>单击主工具栏中的“运行项目”() 按 钮。在 IDE 的缺省浏览器中打开 index.jsp 页。</p> <p>当 index.jsp 显示在浏览器中时,从下拉列表中选择一个主题,然后单击 submit。应会立即转至 response.jsp 页,其中显示了与您的选择相对应的详细信息。</p> </p> <p>“使用 MySQL 数据库创建简单的 Web 应用程序”教程到此结束。本文档说明了如何创建用于连接 MySQL 数据库的简单 Web 应用程序。此外,还演示了如何使用基本的两层体系结构构建应用程序,并且 使用了 JSP、JSTL、JDBC 和 JNDI 等大量技术作为动态访问和显示数据的方法。</p> <p>疑难解答</p> <p>教程应用程序出现的大多数问题是由于 GlassFish Server Open Source Edition 与 MySQL 数据库服务器之间的通信发生问题。如果您的应用程序未正确显示,或者如果您收到服务器错误, 则执行以下检查会非常有用。</p> <p>数据库资源是否存在?</p> <p>服务器上是否存在连接池和数据源?</p> <p>GlassFish 服务器是否可以访问 MySQL ConnecTor/J 驱动程序?</p> <p>数据库是否受口令保护?</p> <p>连接池属性是否设置正确?</p> <p>数据库 资源是否存在?</p> <p>使用 IDE 的“服务”窗口(Ctrl-5 组合键;在 Mac 上为 &#8984-5 组合键)确 保 MySQL 服务器正在运行,并且 MyNewDatabase 可以访问且包含相应的表数据。</p> <p>要连接到 MySQL 数据库服务器,请右键单击 MySQL 服务器节点并选择“连接”。</p> <p>如果 MyNewDatabase 的连接节点 () 未显示在“服务”窗口中,可以通过右键单击 MySQL 驱动程序节 点 () 并选择“连接方法”来创建连接。在显示的对话框中输入所需的详细信息。</p> </p> <p>“新建数据库连接”对话框中提供的字段是对“显示 JDBC URL”选项中输入的 URL 字符串的镜像。 因此,如果您知道该 URL(例如 jdbc:mysql://localhost:3306/MyNewDatabase),则可以将其粘贴到“ 显示 JDBC URL”字段中,随之将会自动填充其余对话框字段。</p> <p>要确保 Subject 和 Counselor 表存在 且其中包含样例数据,请展开 “MyNewDatabase” 连接节点 (),然后找到 “MyNewDatabase” 目录节点 () 。展开该目录节点以查看现有表。可以通过右键单击表节点并选择“查看数据”来查看表数据。</p> </p> <p>服务器上是否存在连接池和数据源?</p> <p>将应用程序部署到 GlassFish 服务器 后,项目中包含的 sun-resources.xml 应指示服务器创建 JDBC 资源和连接池。您可以从“服务”窗口 中的“服务器”节点确定 JDBC 资源和连接池是否存在。</p> <p>展开“服务器”> “GlassFish Server 3.0.1” >“资源”节点。展开“JDBC 资源” 以查看从 sun-resources.xml 创建的 jdbc/IFPWAFCAD 数据源。展开“连接池”节点以查看从 sun- resources.xml 创建的 IfpwafcadPool 连接池。(这在上面部分进行了演示。)</p> <p>GlassFish 服务器 是否可以访问 MySQL ConnecTor/J 驱动程序?</p> <p>确保已将 MySQL ConnecTor/J 驱动程序部署到 GlassFish 服务器。(这在将数据库驱动程序的 JAR 文件添加到服务器中进行了讨论。)</p> <p>找到您计算机上的 GlassFish 服务器安装文件夹,然后向下浏览到 GlassFish domains/domain1/lib 子文件夹。您在此处应该可以找到 mysql-connecTor-java-5.1.6-bin.jar 文件。</p> <p>数据库是否受口令 保护?</p> <p>数据库需要受口令保护才能在本教程中使 GlassFish 服务器数据源正常工作。如果您使用的是 缺省 MySQL root 帐户和空口令,则可以通过命令行提示符设置口令。</p> <p>要将口令设置为 nbuser,请在命令行提示符下导航至 MySQL 安装的 bin 目录,然后输入以下内容:</p> <pre>shell> mysql -u rootmysql> UPDATE mysql.user SET Password = PASSWORD('<em>nbuser</em>') -> WHERE User = 'root';mysql> FLUSH PRIVILEGES;</pre> <p>有关详细信息,请参见正式的 MySQL 参考手册:《确保初始 MySQL 帐户安全》。</p> <p>连接池属性是否设置正确?</p> <p>确保服务器的连接池工作正常。</p> <p>打开“服务”窗口(Ctrl-5 组合键;在 Mac 上为 &#8984-5 组合键),然后展开“服务器”节 点。</p> <p>右键单击 GlassFish 服务器节点,然后选择“查看管理控制台”。</p> <p>输入 admin/adminadmin 分别作为缺省用户名/口令。</p> <p>在控制台左侧的树中,展开“资源”> “JDBC” >“连 接池”> “IfpwafcadPool” 节点。IfpwafcadPool 连接池的详细信息将显示在主窗口中。</p> <p>单击 “Ping” 按钮。如果连接池设置正确,将看到“Ping 成功”消息。</p> </p> <p>如果 ping 失败,请单击“其他属性”标签,并确保所列的属性值设置正确。</p> <p> 或许人生就是一场旅行,在旅行中遇到的每一个人,</p> </div> <center> <a href="https://www.note234.com/336586.html" rel="bookmark" title="NetBeansIDE6.8/6.9教程-使用MySQL数据库创建简单的Web应用程序"><img src="https://www.note234.com/wp-content/themes/generatepress/images/64.jpg" alt="NetBeansIDE6.8/6.9教程-使用MySQL数据库创建简单的Web应用程序" /></a> </center> <footer class="entry-meta" aria-label="条目 meta"> <span class="cat-links"><span class="gp-icon icon-categories"><svg viewBox="0 0 512 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M0 112c0-26.51 21.49-48 48-48h110.014a48 48 0 0143.592 27.907l12.349 26.791A16 16 0 00228.486 128H464c26.51 0 48 21.49 48 48v224c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112z" /></svg></span><span class="screen-reader-text">分类 </span><a href="https://www.note234.com/category/bckf" rel="category tag">编程开发</a></span> <span class="tags-links"><span class="gp-icon icon-tags"><svg viewBox="0 0 512 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M20 39.5c-8.836 0-16 7.163-16 16v176c0 4.243 1.686 8.313 4.687 11.314l224 224c6.248 6.248 16.378 6.248 22.626 0l176-176c6.244-6.244 6.25-16.364.013-22.615l-223.5-224A15.999 15.999 0 00196.5 39.5H20zm56 96c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"/><path d="M259.515 43.015c4.686-4.687 12.284-4.687 16.97 0l228 228c4.686 4.686 4.686 12.284 0 16.97l-180 180c-4.686 4.687-12.284 4.687-16.97 0-4.686-4.686-4.686-12.284 0-16.97L479.029 279.5 259.515 59.985c-4.686-4.686-4.686-12.284 0-16.97z" /></svg></span><span class="screen-reader-text">标签 </span><a href="https://www.note234.com/tag/mysql" rel="tag">mysql</a>、 <a href="https://www.note234.com/tag/web" rel="tag">web</a>、 <a href="https://www.note234.com/tag/%e6%95%b0%e6%8d%ae%e5%ba%93" rel="tag">数据库</a></span> <nav id="nav-below" class="post-navigation" aria-label="文章"> <div class="nav-previous"><span class="gp-icon icon-arrow-left"><svg viewBox="0 0 192 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M178.425 138.212c0 2.265-1.133 4.813-2.832 6.512L64.276 256.001l111.317 111.277c1.7 1.7 2.832 4.247 2.832 6.513 0 2.265-1.133 4.813-2.832 6.512L161.43 394.46c-1.7 1.7-4.249 2.832-6.514 2.832-2.266 0-4.816-1.133-6.515-2.832L16.407 262.514c-1.699-1.7-2.832-4.248-2.832-6.513 0-2.265 1.133-4.813 2.832-6.512l131.994-131.947c1.7-1.699 4.249-2.831 6.515-2.831 2.265 0 4.815 1.132 6.514 2.831l14.163 14.157c1.7 1.7 2.832 3.965 2.832 6.513z" fill-rule="nonzero" /></svg></span><span class="prev"><a href="https://www.note234.com/336585.html" rel="prev">ivy教程(4)-多解析器</a></span></div><div class="nav-next"><span class="gp-icon icon-arrow-right"><svg viewBox="0 0 192 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M178.425 256.001c0 2.266-1.133 4.815-2.832 6.515L43.599 394.509c-1.7 1.7-4.248 2.833-6.514 2.833s-4.816-1.133-6.515-2.833l-14.163-14.162c-1.699-1.7-2.832-3.966-2.832-6.515 0-2.266 1.133-4.815 2.832-6.515l111.317-111.316L16.407 144.685c-1.699-1.7-2.832-4.249-2.832-6.515s1.133-4.815 2.832-6.515l14.163-14.162c1.7-1.7 4.249-2.833 6.515-2.833s4.815 1.133 6.514 2.833l131.994 131.993c1.7 1.7 2.832 4.249 2.832 6.515z" fill-rule="nonzero" /></svg></span><span class="next"><a href="https://www.note234.com/336587.html" rel="next">精通Grails:测试Grails应用程序</a></span></div> </nav> </footer> </div> </article> <div class="inside-article"> <h3>相关文章:</h3> <ul><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433611.html">mysql中的.frm .myd .myi文件</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433599.html">connect()“No such file or directory”错误排除</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433584.html">MySQL数据移植中的乱码问题</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433525.html">实现Comparable接口对树形结构数据进行排序</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433485.html">spring基本配置文件</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433473.html">MySQL Workbench 查询超时time out(Lost Connection)解决方案</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433458.html">【Mysql】Java中对Mysql数据库的增删改查、Java的System类</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433420.html">SharePoint JS Link 之( 三)如何设置JSLink的引用</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433404.html">Im lovin it</a></div> </div></li><li class="widget-common-media-post"> <div class="mtb10 magazine-media-item"><div class="description t-sm c-sub text-3line"><a href="https://www.note234.com/433372.html">java应用中的过滤器Filter(1)</a></div> </div></li></ul> <h4>你感兴趣的文章:</h4> <ul> <li><a href="https://www.note234.com/308793.html">浮窗功能怎么关闭(Win11隐藏输入法悬浮窗的方法)</a></li> <li><a href="https://www.note234.com/27225.html">怎样起动三相同步电动机?起动时其励磁绕组应作如何处置?</a></li> <li><a href="https://www.note234.com/47424.html">建筑给排水设计规范中易错问题汇总!</a></li> <li><a href="https://www.note234.com/323119.html">java实现冒泡排序</a></li> <li><a href="https://www.note234.com/386026.html">系统防火墙变更维护与日常管理技巧汇总</a></li> <li><a href="https://www.note234.com/59611.html">html如何注释代码</a></li> </ul> <h4>标签云:</h4> <div class="customtag"> <a href='https://www.note234.com/wangzhan/tag/%e4%ba%9a%e6%b4%b2%e9%ab%98%e6%b8%85%e7%94%b5%e5%bd%b1%e5%9c%a8%e7%ba%bf/'>亚洲高清电影在线</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%85%8d%e8%b4%b9%e9%ab%98%e6%b8%85%e7%94%b5%e5%bd%b1/'>免费高清电影</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%85%ab%e6%88%92%e5%bd%b1%e9%99%a2%e5%a4%9c%e9%97%b4/'>八戒影院夜间</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%85%ab%e6%88%92%e7%94%b5%e5%bd%b1%e6%9c%80%e6%96%b0%e5%a4%a7%e7%89%87/'>八戒电影最新大片</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%87%ba%e8%bd%a8%e5%9c%a8%e7%ba%bf%e7%94%b5%e5%bd%b1/'>出轨在线电影</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%8d%88%e5%a4%9c%e7%94%b5%e5%bd%b1%e9%99%a2/'>午夜电影院</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%9c%a8%e7%ba%bf%e5%bd%b1%e9%99%a2a1166/'>在线影院a1166</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%9c%a8%e7%ba%bf%e7%94%b5%e5%bd%b1%e9%99%a2/'>在线电影院</a>, <a href='https://www.note234.com/wangzhan/tag/%e5%9c%a8%e7%ba%bf%e8%a7%82%e7%9c%8b%e7%be%8e%e5%89%a7%e4%b8%8b%e8%bd%bd/'>在线观看美剧下载</a>, <a href='https://www.note234.com/wangzhan/tag/%e6%97%a5%e6%9c%ac%e7%88%b1%e6%83%85%e7%94%b5%e5%bd%b1/'>日本爱情电影</a>, <a href='https://www.note234.com/wangzhan/tag/%e6%97%a5%e9%9f%a9%e9%ab%98%e6%b8%85%e7%94%b5%e5%bd%b1%e5%9c%a8%e7%ba%bf/'>日韩高清电影在线</a>, <a href='https://www.note234.com/wangzhan/tag/%e7%94%b5%e5%bd%b1%e5%a4%a9%e5%a0%82%e7%bd%91/'>电影天堂网</a>, <a href='https://www.note234.com/wangzhan/tag/%e7%9b%b4%e6%92%ad%e7%9b%92%e5%ad%90app/'>直播盒子app</a>, <a href='https://www.note234.com/wangzhan/tag/%e8%81%9a%e5%90%88%e7%9b%b4%e6%92%ad/'>聚合直播</a>, <a href='https://www.note234.com/wangzhan/tag/%e9%ab%98%e6%b8%85%e7%be%8e%e5%89%a7/'>高清美剧</a>, <a href='https://www.note234.com/wangzhan/tag/%e9%ab%98%e6%b8%85%e7%be%8e%e5%89%a7%e5%9c%a8%e7%ba%bf%e8%a7%82%e7%9c%8b/'>高清美剧在线观看</a> <a href='https://www.note234.com/wangzhan/tag/ehviewer-e%e7%ab%99/'>EhViewer-E站</a>, <a href='https://www.note234.com/wangzhan/tag/e%e7%ab%99/'>E站</a>, <a href='https://www.note234.com/wangzhan/tag/e%e7%ab%99%e7%bb%bf%e8%89%b2%e7%89%88/' >E站绿色版</a>, <a href='https://www.note234.com/wangzhan/tag/qqmulu-com/'>qqmulu.com</a>, <a href='https://www.note234.com/wangzhan/tag/qq%e7%9b%ae%e5%bd%95%e7%bd%91/'>qq目录网</a>, <a href='https://www.note234.com/wangzhan/tag/qq%e7%bd%91%e7%ab%99%e7%9b%ae%e5%bd%95/'>qq网站目录</a>, </div></div> </main> </div> <div class="widget-area sidebar is-right-sidebar" id="right-sidebar"> <div class="inside-right-sidebar"> <aside id="block-11" class="widget inner-padding widget_block"><div class="_2ho2ho6w023"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u6953233", container: "_2ho2ho6w023", async: true }); </script> <!-- 多条广告如下脚本只需引入一次 --> <script type="text/javascript" src="//cpro.baidustatic.com/cpro/ui/cm.js" async="async" defer="defer" > </script></aside> </div> <div id="box_float"> <div id="float" class="div1"> <aside id="block-12" class="widget inner-padding widget_block"> <div class="_x3rdkhcqm5n"></div> <script type="text/javascript"> (window.slotbydup = window.slotbydup || []).push({ id: "u6958514", container: "_x3rdkhcqm5n", async: true }); </script> </aside></div> </div> </div> </div> </div> </div> <div class="site-footer"> <footer class="site-info" aria-label="站点" itemtype="https://schema.org/WPFooter" itemscope> <div class="inside-site-info grid-container"> <div class="copyright-bar"> <p></p> <p>Copyright © 2023 <a href="https://www.note234.com/" target="_blank">摘录笔记网</a></p> <a href="https://www.note234.com/tags" target="_blank">tags</a>,<a href="https://www.note234.com/wp-sitemap.xml" target="_blank">xml地图</a>,<a href="https://www.note234.com/sitemap.html" target="_blank">网站地图</a>,<a href="https://www.note234.com/lxwm" target="_blank">联系我们</a>,<a href="https://www.yiwen55.com/" target="_blank">易海博客</a>,<a href="https://www.note234.com/wangzhan/" target="_blank">免费网站</a>,<a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">闽ICP备20014300号-1</a> </div> </div> </footer> </div> <a title="回到顶部" aria-label="回到顶部" rel="nofollow" href="#" class="generate-back-to-top" data-scroll-speed="400" data-start-scroll="300"> <span class="gp-icon icon-arrow-up"><svg viewBox="0 0 330 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M305.863 314.916c0 2.266-1.133 4.815-2.832 6.514l-14.157 14.163c-1.699 1.7-3.964 2.832-6.513 2.832-2.265 0-4.813-1.133-6.512-2.832L164.572 224.276 53.295 335.593c-1.699 1.7-4.247 2.832-6.512 2.832-2.265 0-4.814-1.133-6.513-2.832L26.113 321.43c-1.699-1.7-2.831-4.248-2.831-6.514s1.132-4.816 2.831-6.515L158.06 176.408c1.699-1.7 4.247-2.833 6.512-2.833 2.265 0 4.814 1.133 6.513 2.833L303.03 308.4c1.7 1.7 2.832 4.249 2.832 6.515z" fill-rule="nonzero" /></svg></span> </a><script id="generate-a11y">!function(){"use strict";if("querySelector"in document&&"addEventListener"in window){var e=document.body;e.addEventListener("mousedown",function(){e.classList.add("using-mouse")}),e.addEventListener("keydown",function(){e.classList.remove("using-mouse")})}}();</script><!--[if lte IE 11]> <script src="https://www.note234.com/wp-content/themes/generatepress/assets/js/classList.min.js" id="generate-classlist-js"></script> <![endif]--> <script id="generate-menu-js-extra"> var generatepressMenu = {"toggleOpenedSubMenus":"1","openSubMenuLabel":"\u6253\u5f00\u5b50\u83dc\u5355","closeSubMenuLabel":"\u5173\u95ed\u5b50\u83dc\u5355"}; </script> <script src="https://www.note234.com/wp-content/themes/generatepress/assets/js/menu.min.js" id="generate-menu-js"></script> <script id="generate-back-to-top-js-extra"> var generatepressBackToTop = {"smooth":"1"}; </script> <script src="https://www.note234.com/wp-content/themes/generatepress/assets/js/back-to-top.min.js" id="generate-back-to-top-js"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?95d0945b5c7afc67da1ee2166f8ca4b1"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html> <!-- Cached by ezCache --> <!-- Cache created in 1.44s -->