JSP Standard Tag Lib,名为JSP标准标签库, 设计的目的主要用来方便我们将数据输出 ,而不是使用JSP中的语法 <% %> <%= %> <%! %>
。
平常使用的话,我们会在JSP在嵌套HTML代码来实现数据的获取,比如说把一个list中的内容转换为表格显示,需要使用到循环,还要在循环中嵌套HTML代码,看起来很不优雅,而且代码不好阅读。
根据JSTL标签所提供的功能,可以将其分为5个类别。
相当于setAttribute方法
<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="page|requset|session|application"/>
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要存储的值 | 否 | 主体的内容 |
target | 要修改的属性所属的对象 | 否 | 无 |
property | 要修改的属性 | 否 | 无 |
var | 存储信息的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
//下面的标签相当于pageContext.setAttribute("html"); <c:set var="html" value="<h1>hello</h1>"/> <c:set var="html" value="<h1>hello</h1>" score="request"/>
<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>
标签判断表达式的值,如果表达式的值为 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>
标签用于移除一个变量(删除数据),可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
语法:
//相当于xx.removeAttrbute <c:remove var="<string>" scope="<string>"/>
<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>
相当于指令 <%@ include
菜鸟 JSTL-import重定向
用于生成url,优点是可以把url存在变量中,之后便于引用
菜鸟 JSTL——url
可作为上面import,redirect,url中的子标签,表明带参
<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>
属性和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" %>
使用 <fmt:requestEncoding>
标签来指定字符集,用于解码来自表单的数据。在字符集不是ISO-8859-1时必须使用这个标签。
<fmt:requestEncoding value="UTF-8" />
<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 |
<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>
定义一个类,继承与 javax.servlet.jsp.tagext.SimpleTagSupport
(简单标签的支持类,不允许标签内有主体内容)
重写 doTag
方法,标签解析之后会自动执行此方法
类中的成员属性名需要与标签的属性名一致,成员属性需要有get/set方法
JspContext jspcontext = this.getJspContext(); JspWriter out = jspcontext.getOut(); out.println(s);
在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>
jsp中使用<%@ taglib prefix=”Short-Name” uri=”uri”%>指令引入标签库才能使用。
request.setAttribute("now",new Data()); <lq:printDate date="${now}"/>