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脚本片段,下面 ...
随机推荐
- thinkphp 数据库操作
//所有的数据中,查出某个字段$result = $music->field('music')->select();$hotlist = M('News')->where('stat ...
- 数据库---T-SQL语句:查询语句(二)
>查询: 一.查询所有数据: select * from Info ---查询所有数据(行) select Name from Info ---查询特定列(Name列) select N ...
- C++ 过滤出字符串的中文(GBK,UTF-8)
最近在处理游戏敏感词之类的东西,为了加强屏蔽处理,所以需要过滤掉字符串中的除汉字之外的是其他东西如数字,符号,英文字母等. 首先我查阅资料并写了个函数: 示例:返回输入字符串中汉字的个数: std:: ...
- 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!
1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...
- codeforces 327 B. Hungry Sequence
题目链接 题目就是让你输出n个数的序列,要保证该序列是递增的,并且第i个数的前面不能保护它的约数,我直接先对前100000的素数打表,然后输出前n个,so easy. //cf 191 B #incl ...
- 蓝桥杯 2n皇后问题 深搜
默认大家会了n皇后问题 基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和 ...
- 2019前端面试系列——JS高频手写代码题
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...
- Unity经典游戏教程之:合金弹头
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 01-Spring Security框架学习
目录 01-Spring Security框架学习 简介 Spring Security 是什么 Spring Security 解决那些问题 Spring Security 的优点 历史背景 Spr ...
- 初试kafka消息队列中间件一 (只适合初学者哈)
初试kafka消息队列中间件一 今天闲来有点无聊,然后就看了一下关于消息中间件的资料, 简单一点的理解哈,网上都说的太高大上档次了,字面意思都想半天: 也就是用作消息通知,比如你想告诉某某你喜欢他,或 ...