JSP学习笔记(3)——JSTL 标签库
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存在变量中,之后便于引用
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 标签库的更多相关文章
- 在JSP页面中导入jstl标签库
1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...
- 学习笔记_Java_day13_JSTL_自定义标签库(9)
自定义标签 1 自定义标签概述 1.1 自定义标签的步骤 其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样.自 ...
- 重温JSP学习笔记--JSTL标签库
以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...
- jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...
- JavaWeb学习笔记(九)—— JSTL标签库
一.JSTL概述 1.1 什么是JSTL JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...
- 个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!
jsp 第一章 jsp介绍及对比servlet 作用: 动态网页技术,动态的从数据库获取数据 jsp和servlet的优缺点: jsp优点:页面表现方便,利于写html代码 jsp缺点:业务逻辑处理麻 ...
- JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)
1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...
- Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)
一.JSP技术 1.jsp脚本和注释 jap脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部,比如写在doget.dopost 内的代码 2) ...
- 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签
学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分 ...
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...
随机推荐
- bootstrap-treeview后台Json数据的封装及前台的显示
1.bootStrap-treeview是我们常用的树形结构,页面风格也比较清新,但是后台数据的封装比较麻烦,经过研究终于解决,和大家分享一下. 2.前端代码如下 <script> var ...
- 使用ASM实现动态代理
如果对我这段代码感兴趣,直接拷贝测试debug,要不然你不知道我写的是什么鬼,如果有什么问题,可以告诉我. 一.实现动态代理,首先得考虑有应该定义哪些类,根据JDK的动态代理思想,那么它就应该有一个生 ...
- python pip安装requests库总提示:Fatal error in launcher...''
1.python pip安装提示:Fatal error in launcher...'' 我查看了网上都说是电脑同时安装了python2 和python3时候才会有这个错误,但实际上我电脑只安 ...
- java往文本文件中写入信息并修改
题目要求: 1.可以往一个文本文档中写入员工信息:name,id和详情 2.可以更改name package FanCQ.Xue.practice; import java.io.*;import j ...
- KD-tree 专题「Hide and Seek · 巧克力王国」
Lockey的瞎理解 抄了一遍板子又水了俩题,感觉对KD-tree 稍稍理解了一点儿,唠叨一下(二维的KD-tree),如有错误请指出(Lockey 洗脸恭听) 普通平衡树维护的是一维的序列,但对于二 ...
- asp.net core系列 69 Amazon S3 资源文件上传示例
一. 上传示例 Install-Package AWSSDK.S3 -Version 3.3.104.10 using Amazon; using Amazon.Runtime; using Ama ...
- Go包管理工具dep
dep是一个golang依赖管理工具,需要在Go 1.7及更高的版本中使用. 1. 安装 安装dep工具的方式有很多种,如果是mac电脑的话,只需要如下命令: brew install dep 对于L ...
- 使用webstorm调试node.js
折腾半天,还是webstorm顺手,但也遇到一些小问题. 1.代码补全问题 nodeJS自身的补全 File->Project Setting->JavaScript->Librar ...
- 10分钟安装Elasticsearch
关注公众号 itweknow,回复"ES"获取<Elasticsearch权威指南 中文版>. 最近在尝试着搭建一个ELK(一个开源的实时日志分析平台),而本文所讲的E ...
- mvnjar包冲突解决方法
命令 mvn dependency:tree -Dverbose 结果: [INFO] +- com.esotericsoftware:kryo:jar:4.0.2:test [INFO] | +- ...