原文:http://zetcode.com/java/sqlquerytag/

在本教程中,我们将学习如何使用 JSTL 的 SQL 查询标记。

JSTL

JavaServer Pages 标准标记库(JSTL) 是有用的 JSP 标记的集合,这些标记提供了许多 JSP 文件所共有的核心功能。 <sql:query>标记执行 SQL SELECT语句,并将结果保存在范围变量中。

通常,不建议从 JSP 页面访问数据库。 但是,对于简单的应用和测试,它可能会很有用。 在我们的应用中,我们将使用 JSTL 的 SQL 查询标记从 MySQL 数据库检索数据。 该项目是使用 Maven 构建的。 我们将应用部署在 Tomcat 上。

创建一个 MySQL 数据库

首先,我们在 MySQL 中创建testdb数据库和Cars表。

cars_mysql.sql

  1. DROP TABLE IF EXISTS Cars;
  2. CREATE TABLE Cars(Id INT PRIMARY KEY AUTO_INCREMENT,
  3. Name TEXT, Price INT) ENGINE=InnoDB;
  4. INSERT INTO Cars(Name, Price) VALUES('Audi', 52642);
  5. INSERT INTO Cars(Name, Price) VALUES('Mercedes', 57127);
  6. INSERT INTO Cars(Name, Price) VALUES('Skoda', 9000);
  7. INSERT INTO Cars(Name, Price) VALUES('Volvo', 29000);
  8. INSERT INTO Cars(Name, Price) VALUES('Bentley', 350000);
  9. INSERT INTO Cars(Name, Price) VALUES('Citroen', 21000);
  10. INSERT INTO Cars(Name, Price) VALUES('Hummer', 41400);
  11. INSERT INTO Cars(Name, Price) VALUES('Volkswagen', 21600);

这是在 MySQL 中创建Cars表的 SQL。

要创建数据库和表,我们使用mysql监视工具。

  1. $ sudo service mysql start

MySQL 用sudo service mysql start命令启动。

  1. $ mysql -u testuser -p

我们使用mysql监视器连接到数据库。

  1. mysql> CREATE DATABASE testdb;
  2. Query OK, 1 row affected (0.02 sec)

CREATE DATABASE语句创建一个名为testdb的新数据库。

  1. mysql> USE testdb;
  2. mysql> SOURCE cars_mysql.sql

使用source命令,加载并执行cars_mysql.sql文件。

  1. mysql> SELECT * FROM Cars;
  2. +----+------------+--------+
  3. | Id | Name | Price |
  4. +----+------------+--------+
  5. | 1 | Audi | 52642 |
  6. | 2 | Mercedes | 57127 |
  7. | 3 | Skoda | 9000 |
  8. | 4 | Volvo | 29000 |
  9. | 5 | Bentley | 350000 |
  10. | 6 | Citroen | 21000 |
  11. | 7 | Hummer | 41400 |
  12. | 8 | Volkswagen | 21600 |
  13. +----+------------+--------+
  14. 8 rows in set (0.00 sec)

我们验证数据。 请参阅 MySQL 教程,以了解有关 MySQL 的更多信息。

使用 Maven 启动项目

Apache Maven 是一个软件项目管理和理解工具。

  1. $ mvn archetype:generate -DgroupId=com.zetcode -DartifactId=SqlQueryTag
  2. -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

使用maven-archetype-webapp,我们创建了 Web 应用的框架。

  1. $ cd SqlQueryTag/
  2. $ tree
  3. .
  4. ├── pom.xml
  5. └── src
  6. └── main
  7. ├── resources
  8. └── webapp
  9. ├── index.jsp
  10. └── WEB-INF
  11. └── web.xml
  12. 5 directories, 3 files

Maven 创建了这个项目结构。

  1. $ mkdir src/main/webapp/META-INF
  2. $ touch src/main/webapp/META-INF/context.xml

我们创建一个META-INF目录和context.xml文件。

应用

应用连接到先前创建的Cars表,并检索其所有行。 要连接到数据库表,我们使用<sql:query>标签。

Maven 项目对象模型(POM)文件是保存在名为pom.xml的文件中的 Maven 项目的 XML 表示。

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.zetcode</groupId>
  5. <artifactId>SqlQueryTag</artifactId>
  6. <packaging>war</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>SqlQueryTag Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>jstl</groupId>
  13. <artifactId>jstl</artifactId>
  14. <version>1.2</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>mysql</groupId>
  18. <artifactId>mysql-connector-java</artifactId>
  19. <version>5.1.39</version>
  20. </dependency>
  21. </dependencies>
  22. <build>
  23. <finalName>SqlQueryTag</finalName>
  24. </build>
  25. </project>

pom.xml文件中,我们声明 MySQL 驱动程序和 JSTL 库的依赖关系。

context.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context path="/SqlQueryTag" >
  3. <Resource name="jdbc/testdb"
  4. auth="Container"
  5. type="javax.sql.DataSource"
  6. username="testuser"
  7. password="test623"
  8. driverClassName="com.mysql.jdbc.Driver"
  9. url="jdbc:mysql://localhost:3306/testdb"
  10. maxActive="10"
  11. maxIdle="4"/>
  12. </Context>

context.xml文件是 Web 应用的 Tomcat 配置文件。 在context.xml文件中,我们定义了一个数据源。 请参阅 Java 教程中的数据源以了解有关数据源的更多信息。

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. version="3.1">
  6. <session-config>
  7. <session-timeout>
  8. 30
  9. </session-timeout>
  10. </session-config>
  11. </web-app>

我们提供了一个标准的部署描述符。 请注意,Maven 可能会创建与您的 JSTL JAR 不兼容的部署描述符。

index.jsp

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Cars</title>
  9. </head>
  10. <sql:query var="carsList" dataSource="jdbc/testdb">
  11. SELECT * FROM Cars
  12. </sql:query>
  13. <body>
  14. <div align="center">
  15. <table border="1" cellpadding="2">
  16. <h2>List of cars</h2>
  17. <tr>
  18. <th>Id</th>
  19. <th>Name</th>
  20. <th>Price</th>
  21. </tr>
  22. <c:forEach var="car" items="${carsList.rows}">
  23. <tr>
  24. <td><c:out value="${car.Id}" /></td>
  25. <td><c:out value="${car.Name}" /></td>
  26. <td><c:out value="${car.Price}" /></td>
  27. </tr>
  28. </c:forEach>
  29. </table>
  30. </div>
  31. </body>
  32. </html>

index.jsp文件中,我们连接到数据库,从Cars表中检索数据,并将其显示在 HTML 表中。

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

我们需要声明 JSTL 核心和 sql 模块。

  1. <sql:query var="carsList" dataSource="jdbc/testdb">
  2. SELECT * FROM Cars
  3. </sql:query>

使用<sql:query>标记,执行SELECT * FROM Cars语句。 数据存储在carsList变量中。 数据源由dataSource参数指定。

  1. <c:forEach var="car" items="${carsList.rows}">
  2. <tr>
  3. <td><c:out value="${car.Id}" /></td>
  4. <td><c:out value="${car.Name}" /></td>
  5. <td><c:out value="${car.Price}" /></td>
  6. </tr>
  7. </c:forEach>

<c:forEach>变量通过carsList变量,<c:out>输出当前值。

构建和部署

现在,我们将构建和部署该应用。

  1. $ mvn package

我们建立项目。

  1. $ mysql start/running, process 6030
  2. $ $TOMCAT_HOME/bin/startup.sh

我们启动 MySQL 和 Tomcat。

  1. $ cp target/SqlQueryTag.war $TOMCAT_HOME/webapps

我们部署应用。

JSTL 中的 SQL 查询标记 - 图1

图:展示汽车

我们在浏览器中导航到该应用,然后从数据库中获取数据。

这是 SQL 查询标记教程。 我们已经使用 JSTL,JSP,MySQL,Tomcat 和 Maven 构建了一个 Web 应用。 您可能还需要检查 JSTL forEach 标签验证过滤器教程JDBI 教程MySQL 教程Apache Derby 教程