JSTL组成:
JSTL –Core 核心标签库。 - 这是本部分的重点
JSTL – I18N - 国际化标签库。Internationalization- I18N
JSTL - Functions – 函数库。
JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。
JSTL - XML ,对XML的操作(同SQL标签)。
JSTL一般必须配合EL表达式使用才能发挥其功能之强大
如果你的Web项目是基于JavaEE2.5或以上的。可以在你项目的任意页面上通过<%@ taglib 指令使用JSTL的核心标签库。
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
uri是引用标签库的资源定位符,并不代表一个实际的地址。
Prefix是自定义的前缀。
JSTL-Core一共包含以下几个子标签:
标签的具体使用说明可以用Java反编译软件JD-GUI打开tomcat/webapps下的对应项目下的WEB-INF/LIB/jstl-impl.jar/META-INF找到对应的标签打开即可。
具体使用代码示例如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>jstl演示</title>
</head>
<body>
<!-- 1、演示c:out的用法 -->
<%
pageContext.setAttribute("RED", "<font color='red'>你好</font>");
%>
<c:out value="${RED }" />
<%--结果为:<font color='red'>你好</font>,escapeXml默认为true,即默认输出为原样格式 --%>
<br/>
<c:out value="${RED }" escapeXml="false" />
<%--结果为:红色的“你好” --%>
<br/>
<c:out value="${GREEN }" escapeXml="false" default="找不到"/>
<%--结果为:找不到 ”/>从page到application开始查找,如果没有找到,就显示默认值“找不到” --%>
<br/>
<!-- 2、演示c:set的用法 -->
<c:set var="name" value="Jack" />
${name }
<%--结果为:Jack --%>
<br/>
<jsp:useBean id="user" class="cn.hncu.domain.User"/>
<c:set target="${user }" property="name" value="Tom"/>
<c:set target="${user }" property="age" value="24"/>
${user.name } ${user.age }
<%--结果为:Tom 24 --%>
<br/>
<jsp:useBean id="map" class="java.util.HashMap" scope="request"/>
<c:set target="${map }" property="name" value="张三" />
<c:set target="${map }" property="sex" value="男" />
${map.name } ${map.sex }
<%--结果为:张三 男 --%>
<br/>
<!-- 3、演示c:if的用法 -->
<c:if test="${map.name=='张三' }" var="boo" scope="request" >
abcdefg
</c:if>
<c:if test="${!boo }">
gfdecba
</c:if>
<%--结果为:abcdefg,注意此处因为有包含关系,c:if不能用自封闭--%>
<br/>
<!-- 4、演示c:choose c:when c:otherwise的用法 -->
<c:set var="score" value="95"/>
<c:choose>
<c:when test="${score>90 }">
优秀
</c:when>
<c:when test="${score>80 }">
良好
</c:when>
<c:when test="${score>70 }">
中等
</c:when>
<c:otherwise>
不行
</c:otherwise>
</c:choose>
<%-- 结果为:优秀 此处功能相当于带break功能的switch-case语句 --%>
<br/>
<!-- 5、演示c:remove -->
<c:set var="aaa" value="abcde" />
<c:remove var="aaa"/>
${aaa }
<%-- 没有输出结果,因为移除了aaa属性 --%>
<br/>
<!-- 5、演示c:import -->
<c:import url="/jsps/aa.jsp"></c:import>
<%-- 此处有两个细节,url的第一个"/"代表项目根本目录,功能上此处相当于jsp动态导入,
两个页面共享同一个request --%>
<br/>
<%--
<!-- 6、演示c:redirect -->
<c:redirect url="/jsps/bb.jsp"/>
--%>
<%-- 重定向,相当于response.sendRedirect(...) --%>
<!-- 7、演示c:rforTokens -->
<c:forTokens items="aa,bb,cc,dd" delims="," var="x">
${x },,,
</c:forTokens>
<%-- 结果为:aa,,, bb,,, cc,,, dd,,,,相当于拆分字符串 --%>
<br/>
<!-- 8、演示c:forEach -->
<%
String strs[] = {"11","22","33","44","55"};
pageContext.setAttribute("strs", strs);
%>
<c:forEach items="${strs}" var="str">
${str }-
</c:forEach>
<%-- 结果为:11-22-33-44-55,功能相当于增强for循环 --%>
<c:forEach begin="20" end="40" step="2" var="i" varStatus="x">
${i },${x.index },${x.count }<br/>
</c:forEach>
<%-- 功能相当于普通for循环 --%>
</body>
</html>
jstl的Function函数调用方式:
用之前现在页面首部导入标签<%@taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>
引用:${fn:函数名(参数)}
function标签库函数使用:
1:${fn:contains(name, searchString)} name变量的字符串值是否包含searchString子串,返回boolean值
2:${fn:containsIgnoreCase(name, searchString)} 与1相同+忽视大小写
3:${fn:endsWith(filename, “.txt”)} 判断filename是否以.txt子串结束 ,返回boolean值
4:${fn:escapeXml(param:info)} Escapes characters that could be interpreted as XML markup.返回string值
5: fn:indexOf(name,“−“)name中第一次出现−字符的下标返回int值6: {fn:join(array, “;”)} 将array数组,用;连接成一个字符串,返回string值
7:${fn:length(shoppingCart.products)} shoppingCart.products变量的长度,返回int值
8:${fn:replace(text, “-“, “•”)} 将text中的-字符串用•字符串代替,返回行的字符串String值
9:${fn:split(customerNames, “;”)} 将customerNames用;分割,返回字符串数组
10:${fn:startsWith(product.id, “100-“)} 判断product.id是否以100-子串开头 ,返回boolean值
11:${fn:substring(zip, 6, -1)} 截取zip的子串,从下标为6 到length-1(不包含)的子串,返回子串String值
12:${fn:substringAfter(zip, “-“)} 将zip中 从 第一次出现-字符串的下标 到最后 截取成子串,返回子串String值
13:${fn:substringBefore(zip, “-“)} 将zip中 从下标0 到 第一次出现-字符串的下标 (不包含) 截取成子串,返回子串String值
14:${fn.toLowerCase(product.name)} 将product.name全部字母转换成小写,返回新的String值
15:${fn.UpperCase(product.name)} 将product.name全部字母转换成大写,返回新的String值
16:${fn.trim(name)} name前后空格去掉,返回新的String值