JSTL-数据库标签库

在JSP页面中使用标签库代替传统Java片段语文来实现页面显示逻辑已经不是新技术了,但是自定义的标签容易造成重复定义和非标准的实现,所以JSTL(JSP Standard Tag Library,JSP标准标签库)诞生了。JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的(标准是SUN制定,apache实现的,SUN收录了apache的实现)。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上。

VersionJSTL versionRequirements
Standard 1.2.3JSTL 1.2Servlet 2.5, JavaServer Pages 2.1
Standard 1.1JSTL 1.1Servlet 2.4, JavaServer Pages 2.0
Standard 1.0JSTL 1.0Servlet 2.3, JavaServer Pages 1.2


Sun 发布的标准 JSTL1.1 标签库有以下几个标签:

  • 核心标签库:包含 Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等。
  • 格式化标签库:用来格式化显示数据的工作,比如:对不同区域的日期格式化等。
  • 数据库标签库:可以做访问数据库的工作。
  • XML 标签库:用来访问 XML 文件的工作,这是 JSTL 标签库的一个特点。
  • 函数标签库:用来读取已经定义的某个函数。

使用JSTL的步骤:

  • 在项目中引入jstl的相关jar包,确保jar存在:jstl.jar、standard。
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
  • 在需要使用标签的JSP页面上使用taglib指令引入标签库。
  • 在需要使用标签的位置直接使用标签库。
数据库标签:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL_SQL</title>
</head>
<body>

<!-- ****数据源【sql:setDataSource】****
    driver="要注册的JDBC驱动"
    url="数据库连接的JDBC URL"
    user="数据库用户名"
    password="数据库密码"
    dataSource=""
    var="代表数据库的变量"
    scope="var属性的作用域(page request session application),默认为page"
    这里需要先导入mysql驱动jar,导入方式可以有点不一样,这里需要将jar包加入到JRE目录下的lib/ext文件夹下,
    否则可能会出现No suitable driver found for jdbc异常
 -->
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
     url="jdbc:mysql://localhost:3306/sso?useUnicode=true&characterEncoding=UTF-8"
     user="root"  password="123456"/>
${snapshot}
<!-- 输出:
org.apache.taglibs.standard.tag.common.sql.DataSourceWrapper@9c781ab 
-->

<hr>
<!-- ****SQL查询【sql:query】****
    sql="要执行的SQL语句,默认为主体内容"
    dataSource="数据源"
    maxRows="存储在变量中的最大结果数,默认无无穷大"
    startRow="开始记录的结果行数,默认为0"
    var="存储查询结果的变量"
    scope="var属性的作用域(page request session application),默认为page"
    rowCount属性。该属性统计结果集中有效记录的量,可以使用于大批量数据分页显示。
    查询结果属性:
        rows                结果数据,字段名={字段值···}
        rowsByIndex         常用得到数据库中数据的方式,从有效行的第一个元素开始遍历,到最后一个有效行的最后一个元素。
        columnNames         用于得到数据库中的字段名。
        limitedByMaxRows    用于判断是否受到了maxRows的限制
 -->
<sql:query dataSource="${snapshot}" var="result" maxRows="10" startRow="1">
    SELECT id,name from t_user;
</sql:query>
<c:forEach var="user" items="${result.rows}">
    ${user.id}、${user.name}<br>
</c:forEach>
<!-- 输出:
输出用户表从第2条开始的10条数据
-->

<hr>
<!-- ****SQL更新【sql:update】****
    sql="要执行的SQL语句,默认为主体内容"
    dataSource="数据源"
    var="存储影响行数的变量"
    scope="var属性的作用域(page request session application),默认为page"
 -->
<sql:update dataSource="${snapshot}" var="insert_count">
    INSERT INTO t_user (`name`, `account`, `password`, `birthday`) VALUES ('xiaogong', 'xg', '123456', now());
</sql:update>
insert_count: ${insert_count}
、
<sql:update dataSource="${snapshot}" var="update_count">
    UPDATE t_user SET name = 'xiaogong1' WHERE name = 'xiaogong';
</sql:update>
update_count:${update_count}
<!-- 输出:
insert_count: 1、update_count:1
-->

<hr>
<!-- ****SQL参数【sql:param】****
    value="参数值,默认为主体内容,如果为null值时,则将占位符设为SQL null"
 -->
<sql:update dataSource="${snapshot}" var="update_count">
    UPDATE t_user SET name = '小' WHERE name = ?
    <sql:param>xiaogong1</sql:param>
</sql:update>
update_count:${update_count}
<!-- 输出:
update_count:1
-->

<hr>
<!-- ****SQL日期参数【sql:dateParam】****
    value="参数值,默认为主体内容,如果为null值时,则将占位符设为SQL null"
    type="DATE (只有日期),TIME(只有时间), 默认TIMESTAMP (日期和时间)"
 -->
<sql:query dataSource="${snapshot}" var="result">
    SELECT id,name from t_user WHERE birthday < ?
    <sql:dateParam value="<%=new java.util.Date()%>"/>
</sql:query>
<c:forEach var="user" items="${result.rows}">
    ${user.id}、${user.name}<br>
</c:forEach>
<!-- 输出:
输出birthday小于当前时间的所有用户信息
-->

<hr>
<!-- ****SQL事务【sql:transaction】****
    dataSource="数据源"
    isolation="事务隔离等级 (READ_COMMITTED,,READ_UNCOMMITTED, REPEATABLE_READ或 SERIALIZABLE)"
 -->
<sql:transaction dataSource="${snapshot}">
    <sql:update var="update_count">
        UPDATE t_user SET name = 'xiaogong' WHERE name = 'xiaogong1'
    </sql:update>
    <sql:query var="result">
        SELECT id,name from t_user WHERE birthday < now()
    </sql:query>
</sql:transaction>
<!-- 输出:
以上这两个语句是在同一个事务中执行
-->

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值