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 函数
标签库可以和esl表达式联用
核心标签库 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
语法:
语法: 相当于指令 <%@ include 重定向 用于生成url,优点是可以把url存在变量中,之后便于引用 可作为上面import,redirect,url中的子标签,表明带参 语法: 属性和foreach用于,不过多了一个属性delims,表明分隔符,有多个分隔符使用空格隔开 引用: 使用 引用: 注意:结果集对象的类型不是java.sql.resulset 的实例,而是javax.servlet.jsp.jstl.sql.result 的实例 定义一个类,继承与 重写 类中的成员属性名需要与标签的属性名一致,成员属性需要有get/set方法 获得jsp中的out对象: 在web-inf目录下新建tld文件,文件名随意。tlc文件主要说明标签如何使用,是由哪一个类实现和一些标签的属性配置。 jsp中使用<%@ taglib prefix=”short-name” uri=”uri”%>指令引入标签库才能使用。<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
//相当于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
菜鸟 jstl-importredirect
url
param
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
<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查询语句
运行sql更新语句
将sql语句中的参数设为指定值
将sql语句中的日期参数设为指定的java.util.date 对象值
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行
连接数据库
<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>
获取数据
<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
方法,标签解析之后会自动执行此方法jspcontext jspcontext = this.getjspcontext();
jspwriter out = jspcontext.getout();
out.println(s);
2. 编写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. 引用自定义标签
4. 使用
request.setattribute("now",new data());
<lq:printdate date="${now}"/>
上一篇: Jsp学习笔记(2)——页面导航、表单、EL表达式
下一篇: C#使用迭代法实现Fibnaci数列