What
JSTL:JSP Standard Tag Library的缩写,即JSP标准标签库,是sun的一套标准
When
.jsp页面上使用
Why
- 因为.jsp页面主要用于显示的,最好不要写java代码<%%>,如果不用JSTL就得写java代码,方便简洁,代码量少
- 前端美工人员可能对java代码不太了解,不易于调页面
- 不必应用各种库了(比如接收的是个一个servlet类传过来的参数,就不用引用该servlet类了,但是如果不用JSTL就的引用该类)
How
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
1.添加相应的jar包
2.在.jsp中采用taglib指令引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
taglib指定是定义了一个标签库以及自定义标签的前缀,
3.标签的使用
核心标签
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL
格式化标签
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:parseDate> 解析一个代表着日期或时间的字符串
JSTL函数
fn:length() 返回字符串长度
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
具体使用方法:http://www.runoob.com/jsp/jsp-jstl.html
4.表达式语言EL
EL(Expression Language的缩写)提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化,可代替传统的<%="..."%>
形式的Java表达式。语法结构:${expression}
表达式:${1+1}输出为2
算数运算符还有:-,*,/,div,%,mod
关系运算符:==,eq,!=,lt,gt
逻辑运算符:and,or,not
empty运算符:${empty var}
,如果变量var为null,就返回true
访问对象:${user[“name”]}或${user.name}
,user对象必须有get方法
访问数组:${users[0]}表示访问users数组中的第一个元素
隐含对象:EL语言定义了11个隐含对象,他们都是java.util.Map类型
EL自定义函数:
在WEB-INF下,添加.tld文件
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>my functions library</description>
<display-name>my functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>my</short-name>
<uri>http://www.tianfujiyun.com/myfunctions</uri>
<function>
<name>say</name>
<function-class>com.bjpowernode.jstl.MyFunctions</function-class>
<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
</function>
</taglib>
.java文件
public class MyFunctions {
/**
* 必须为静态全局的
* @param username
* @return
*/
public static String sayHello(String username) {
return "Hello " + username;
}
}
.jsp页面调用
//引用
<%@ taglib uri="http://www.bjpowernode.com/myfunctions" prefix="my" %>
...
自定义函数:${my:say("张三") }