JSP Standard Tag Lib,名为JSP标准标签库,设计的目的主要用来方便我们将数据输出,而不是使用JSP中的语法<% %> <%= %> <%! %>

平常使用的话,我们会在JSP在嵌套HTML代码来实现数据的获取,比如说把一个list中的内容转换为表格显示,需要使用到循环,还要在循环中嵌套HTML代码,看起来很不优雅,而且代码不好阅读。

根据JSTL标签所提供的功能,可以将其分为5个类别。

  • 核心标签 c.tld
  • 格式化标签 f.tld
  • SQL 标签 s.tl
  • XML 标签 x.tld
  • JSTL 函数

标签库可以和EL表达式联用

核心标签库 c.tld

set

相当于setAttribute方法

语法:

<c:set
var="<string>"
value="<string>"
target="<string>"
property="<string>"
scope="page|requset|session|application"/>
属性 描述 是否必要 默认值
value 要存储的值 主体的内容
target 要修改的属性所属的对象
property 要修改的属性
var 存储信息的变量
scope var属性的作用域 Page

scope属性有四种选择:page,requset,session,application

//下面的标签相当于pageContext.setAttribute("html");
<c:set var="html" value="<h1>hello</h1>"/> <c:set var="html" value="<h1>hello</h1>" score="request"/>

out

语法:

<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
属性 描述 是否必要 默认值
value 要输出的内容
default 输出的默认值 主体中的内容
escapeXml 是否忽略XML特殊字符 true
//html是上面set的内容
//输出<h1>hello</h1>,忽略了转义
<c:out value="${pageScope.html}"></c:out>
//输出显示一级标题hello
<c:out value="${pageScope.html}" escapeXml="false"></c:out>

if

<c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容

语法:

<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
属性 描述 是否必要 默认值
test 条件
var 用于存储条件结果的变量
scope var属性的作用域 page
<c:if test="${"hello".startWith("h")}" var="flag" >
<p>hello以h开头</p>
</c:if> //if-else语句
<c:if test="${"hello".startWith("h")}" var="flag" >
<p>hello以h开头</p>
</c:if>
<c:if test="${flag}">
<p>hello不以h开头</p>
</c:if>

remove

<c:remove>标签用于移除一个变量(删除数据),可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。

语法:

//相当于xx.removeAttrbute
<c:remove var="<string>" scope="<string>"/>

choose

<c:set value="3000" var="sal" />
<c:choose>
<c:when test="${sal <3000}">
<p>z混日子</p>
</c:when>
<c:when test="${sal >=300 and sal <5000}">
<p>还算凑合</p>
</c:when>
<c:otherwise>
<p>富有</p>
</c:otherwise>
</c:choose>

import

相当于指令 <%@ include

菜鸟 JSTL-import

redirect

重定向

url

用于生成url,优点是可以把url存在变量中,之后便于引用

菜鸟 JSTL——url

param

可作为上面import,redirect,url中的子标签,表明带参

forEach

语法:

<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
属性 描述 是否必要 默认值
items 要被循环的信息
begin 开始的元素(0=第一个元素,1=第二个元素) 0
end 最后一个元素(0=第一个元素,1=第二个元素) Last element
step 每一次迭代的步长 1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称
<c:forEach var="item" items="${lists}" varStatus="staus">
${item}
staus.index 当前的下标 0开始
staus.count 从1开始
</c:forEach>

forTokens

属性和forEach用于,不过多了一个属性delims,表明分隔符,有多个分隔符使用空格隔开

<c:set var="token" value="2010,2,3.25,47,58:62"/>
<c:forTokens items="${token}" delims=", . :" var="item">
<p>${item}</p>
</c:forTokens>

格式化标签

引用:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

requestEncoding

使用<fmt:requestEncoding>标签来指定字符集,用于解码来自表单的数据。在字符集不是ISO-8859-1时必须使用这个标签。

<fmt:requestEncoding value="UTF-8" />

formatNumber

<fmt:formatNumber
value="<string>"
type="<string>"
pattern="<string>"
currencyCode="<string>"
currencySymbol="<string>"
groupingUsed="<string>"
maxIntegerDigits="<string>"
minIntegerDigits="<string>"
maxFractionDigits="<string>"
minFractionDigits="<string>"
var="<string>"
scope="<string>"/>
属性 描述 是否必要 默认值
value 要显示的数字
type NUMBER,CURRENCY,或 PERCENT类型 Number
pattern 指定一个自定义的格式化模式用与输出
currencyCode 货币码(当type="currency"时) 取决于默认区域
currencySymbol 货币符号 (当 type="currency"时) 取决于默认区域
groupingUsed 是否对数字分组 (TRUE 或 FALSE) true
maxIntegerDigits 整型数最大的位数
minIntegerDigits 整型数最小的位数
maxFractionDigits 小数点后最大的位数
minFractionDigits 小数点后最小的位数
var 存储格式化数字的变量 Print to page
scope var属性的作用域 page

fromatData

<fmt:formatDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
timeZone="<string>"
var="<string>"
scope="<string>"/>
属性 描述 是否必要 默认值
value 要显示的日期
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 自定义格式模式
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面

数据库连接

引用:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
sql:setDataSource 指定数据源
sql:query 运行SQL查询语句
sql:update 运行SQL更新语句
sql:param 将SQL语句中的参数设为指定值
sql:dateParam 将SQL语句中的日期参数设为指定的java.util.Date 对象值
sql:transaction 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

连接数据库

<sql:setDataSource var="myDb"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:ORCL"
user="xx"
password="xx"
scope="application"/>

查询

<sql:query var="resultSet" dataSource="${myDb}">
select * from employee where ename like ? and sal>=? and hiredate<?
<%--这里的顺序与上面的?顺序相同 --%>
<sql:param value="%A%"/>
<sql:param>1000.0</sql:param>
<sql:dateParam value="${hiredate}"/>
</sql:query>

注意:结果集对象的类型不是java.sql.ResulSet 的实例,而是javax.servlet.jsp.jstl.sql.Result 的实例

获取数据

<c:forEach var="emp" items="${resultSet.rows}">
<tr>
<td>${emp.empno}</td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.mgr}</td>
<td><fmt:formatDate value="${emp.hiredate}" pattern="yyyy年MM月dd日"/></td>
<td><fmt:formatNumber value="${emp.sal}" type="currency" /> </td>
<td>${emp['comm']}</td>
<td>${emp['deptno']}</td>
</tr>
</c:forEach>

自定义JSTL标签

1. 定义类

定义一个类,继承与javax.servlet.jsp.tagext.SimpleTagSupport(简单标签的支持类,不允许标签内有主体内容)

重写doTag方法,标签解析之后会自动执行此方法

类中的成员属性名需要与标签的属性名一致,成员属性需要有get/set方法

获得JSP中的out对象:

JspContext jspcontext = this.getJspContext();
JspWriter out = jspcontext.getOut();
out.println(s);

2. 编写tlc文件

在web-inf目录下新建tld文件,文件名随意。tlc文件主要说明标签如何使用,是由哪一个类实现和一些标签的属性配置。

<?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1"> <tlib-version>1.0</tlib-version>
<!--下面的两个属性,之后引用需要用到-->
<short-name>lq</short-name>
<uri>http://www.lanqiao.com/tag</uri> <tag>
<description>完成日期的格式化输出</description>
<!--标签名-->
<name>printDate</name>
<!--标签实现类-->
<tag-class>com.lanqiao.tag.PrintDateTag</tag-class>
<!--标签主休形式-->
<body-content>empty</body-content>
<attribute>
<name>date</name>
<!--属性是否必须-->
<required>false</required>
<!--是否可使用EL或脚本求值-->
<rtexprvalue>true</rtexprvalue>
<type>java.util.Date</type>
</attribute>
<attribute>
<name>pattern</name>
<!--属性是否必须-->
<required>false</required>
<!--是否可使用EL或脚本求值-->
<rtexprvalue>false</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag> </taglib>

3. 引用自定义标签

jsp中使用<%@ taglib prefix=”Short-Name” uri=”uri”%>指令引入标签库才能使用。

4. 使用

request.setAttribute("now",new Data());
<lq:printDate date="${now}"/>

JSP学习笔记(3)——JSTL 标签库的更多相关文章

  1. 在JSP页面中导入jstl标签库

    1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...

  2. 学习笔记_Java_day13_JSTL_自定义标签库(9)

    自定义标签 1 自定义标签概述 1.1 自定义标签的步骤 其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样.自 ...

  3. 重温JSP学习笔记--JSTL标签库

    以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...

  4. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  5. JavaWeb学习笔记(九)—— JSTL标签库

    一.JSTL概述 1.1 什么是JSTL  JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...

  6. 个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!

    jsp 第一章 jsp介绍及对比servlet 作用: 动态网页技术,动态的从数据库获取数据 jsp和servlet的优缺点: jsp优点:页面表现方便,利于写html代码 jsp缺点:业务逻辑处理麻 ...

  7. JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

    1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...

  8. Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)

    一.JSP技术 1.jsp脚本和注释 jap脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部,比如写在doget.dopost 内的代码 2) ...

  9. 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

    学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签.  jsp标签的分 ...

  10. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

随机推荐

  1. Spring Boot 面试的十个问题

    用下面这些常见的面试问题为下一次 Spring Boot 面试做准备. 在本文中,我们将讨论 Spring boot 中最常见的10个面试问题.现在,在就业市场上,这些问题有点棘手,而且趋势日益严重. ...

  2. ios开发--给应用添加新的字体的方法

    1.网上搜索字体文件(后缀名为.ttf,或.odf) 2.把字体库导入到工程的resouce中 3.在程序添加以下代码 输出所有字体 NSArray *familyNames = [UIFont fa ...

  3. NDK jni mk文件 so文件 巴啦啦 初体验

    概念JNI(Java Native Interface,Java本地接口),实现了Java和其他语言的交互(主要是C/C++),如:Java程序通过JNI调用C/C++编写的在Windows上运行的D ...

  4. HashMap常见面试题整理

    花了三天时间来仔细阅读hashMap的源码,期间补了下不少数据结构的知识,刷了不少相关的面试题并进行了整理 1.谈一下HashMap的特性? 1.HashMap存储键值对实现快速存取,允许为null. ...

  5. 非web下的PowerMockito单元测试

    一.介绍 PowerMockito 可以用来 Mock 掉 final 方法(变量).静态方法(变量).私有方法(变量).想要使用 PowerMockito Mock掉这些内容,需要在编写的测试类上使 ...

  6. redis过期策略与内存淘汰机制分析

    过期策略: 我们在set key时,可以给一个expire time,就是过期时间 这段过期时间以后,redis对key删除使用:定期删除+惰性删除 定期删除指redis默认在100ms内随机抽取一些 ...

  7. 2019上半年总结——Github上那些Java面试、学习相关仓库

    分享一下最近逛Github看到了一些对于Java面试以及学习有帮助的仓库,这些仓库涉及Java核心知识点整理.Java常见面试题.算法.基础知识点比如网络和操作系统等等. 知识点相关 1.JavaGu ...

  8. spark shuffle的写操作之准备工作

    前言 在前三篇文章中,spark 源码分析之十九 -- DAG的生成和Stage的划分 剖析了DAG的构建和Stage的划分,spark 源码分析之二十 -- Stage的提交 剖析了TaskSet任 ...

  9. kubeadm源码分析

    k8s离线安装包 三步安装,简单到难以置信 kubeadm源码分析 说句实在话,kubeadm的代码写的真心一般,质量不是很高. 几个关键点来先说一下kubeadm干的几个核心的事: kubeadm ...

  10. C语言数组排序——冒泡排序、选择排序、插入排序

    一.冒泡排序 原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置. 然后比较第二.第三个……直到比较第n-1个和第n个,此时,每一次比较都 ...