JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
要使用JSTL,首先要先下载好jar包,点击这里进行下载,下载好后,导入项目的WEN-INF的lib目录下即可,当然,要在jsp中使用JSTL,还得使用@taglib标签,不过不同的分类情况不一样,下面我们来看看JSTL标签的分类。
可以分为4大类和JSTL函数
本文主要介绍核心标签和JSTL函数。
核心标签:
在JSP文件开头使用如下语法
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
格式化标签:
在JSP文件开头使用如下语法
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL标签:
在JSP文件开头使用如下语法
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
XML标签:
在JSP文件开头使用如下语法
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
JSTL函数:
在JSP文件开头使用如下语法
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
下面正式开始介绍核心标签。
核心标签库共有14个标签,从功能上分为4类
下面开始一个一个介绍。都配代码。
1. out标签的用法
<c:out value="第一个JSTL小程序">c:out>
<%
String name = "CodeTiger";
request.setAttribute("name", name);
%>
<c:out value="${name1}" default="error">c:out><br>
<c:out value="<CodeTiger>" escapeXml="false">c:out><br>
输出
第一个JSTL小程序
error
2.set标签的用法
<c:set var="person1" value="CodeTiger" scope="page">c:set>
<c:out value="${person1}">c:out><br>
<c:set var="person2" scope="session">liuc:set>
<c:out value="${person2}">c:out><br>
<c:set target="${people}" property="username" value="CodeTiger">c:set>
<c:set target="${people}" property="address" value="NJUPT">c:set>
<c:out value="${people.username}">c:out>
<c:out value="${people.address}">c:out><br>
输出
CodeTiger
liu
CodeTiger NJUPT
<c:set var="firstName" value="xiaop">c:set>
<c:out value="${firstName}">c:out>
<c:set var="lastName" value="liu">c:set>
<c:remove var="lastName"/>
<c:out value="${lastName}">c:out><br>
输出
xiaop
<c:catch var="error">
<c:set target="${Code}" property="Tiger">CodeTigerc:set>
c:catch>
<c:out value="${error}">c:out><br>
输出
javax.servlet.jsp.JspTagException
<form action="index.jsp" method = "post">
<input type = "text" name = "score" value = "${param.score}">
<input type = "submit" value = "提交">
form>
<c:if test="${param.score >= 90}" var="grade" scope="session">
<c:out value="恭喜,成绩优秀">c:out>
c:if>
<c:if test="${param.score >= 80 && param.score < 90}">
<c:out value="恭喜,成绩良好">c:out>
c:if>
<c:out value="${sessionScope.grade}">c:out>
这三个合在一起讲,有点类似switch case default。
choose:本身只当做
when:
otherwise:
接上面的form表单
<c:choose>
<c:when test="${param.score >= 90 && param.score <= 100}">
<c:out value="优秀">c:out>
c:when>
<c:when test="${param.score >= 80 && param.score < 90}">
<c:out value="良好">c:out>
c:when>
<c:when test="${param.score >= 70 && param.score < 80}">
<c:out value="中等">c:out> c:when>
<c:when test="${param.score >= 60 && param.score < 70}">
<c:out value="及格">c:out>
c:when>
<c:when test="${param.score >= 0 && param.score < 60}">
<c:out value="不及格">c:out>
c:when>
<c:otherwise>
<c:out value="输入的分数不合法">c:out>
c:otherwise>
c:choose>
<c:choose>
<c:when test="${param.score == 100}">
<c:out value="您是第一名">c:out>
c:when>
c:choose><br>
<%
List<String> names = new ArrayList<String>();
names.add("liu");
names.add("xu");
names.add("Code");
names.add("Tiger");
request.setAttribute("names", names);
%>
<c:forEach var="name" items = "${requestScope.names}">
<c:out value="${name}">c:out><br>
c:forEach>
<c:out value="========================">c:out><br>
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3">
<c:out value="${name}">c:out><br>
c:forEach>
<c:out value="========================">c:out><br>
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3" step = "2">
<c:out value="${name}">c:out><br>
c:forEach>
<c:out value="========================">c:out><br>
<c:forEach var="name" items = "${requestScope.names}" begin="0" end="3" varStatus="n">
<c:out value="${name}">c:out><br>
<c:out value="index:${n.index}">c:out><br>
<c:out value="count:${n.count}">c:out><br>
<c:out value="first:${n.first}">c:out><br>
<c:out value="last:${n.last}">c:out><br>
<c:out value="-----------------">c:out><br>
c:forEach>
<c:out value="========================">c:out><br>
输出
liu
xu
Code
Tiger
========================
xu
Code
Tiger
========================
xu
Tiger
========================
liu
index:0
count:1
first:true
last:false
-----------------
xu
index:1
count:2
first:false
last:false
-----------------
Code
index:2
count:3
first:false
last:false
-----------------
Tiger
index:3
count:4
first:false
last:true
-----------------
========================
上面的varStatus属性,有index、count、first、last这几个状态。
<c:forTokens items="010-12345-678" delims="-" var="num">
<c:out value="${num}">c:out><br>
c:forTokens>
输出
010
12345
678
9.import标签的用法
检索一个绝对或相对 URL,然后将其内容暴露给页面
该标签和
该标签只是把URL属性中的资源加载到页面中,URL地址栏的地址不会改变。
<c:catch var="error1">
<c:import url="http://www.codeliu.com">c:import>
c:catch>
<c:out value="${error1}">c:out><br>
<c:catch var="error2">
<c:import url="test.txt" charEncoding="gbk" scope="session" var="test">c:import>
c:catch>
<c:out value="${error2}">c:out>
<c:out value="${sessionScope.test}">c:out><br>
<c:catch var="error3">
<c:import url="/index.jsp" context="/MyFirstJSP">c:import>
c:catch>
<c:out value="${error3}">c:out><br>
redirect:重定向至一个新的URL.同时可以在url中加入指定的参数
param:用来给包含或重定向的页面传递参数
<c:redirect url="rec.jsp">
<c:param name="username" value="liu">c:param>
<c:param name="password" value="123456">c:param>
c:redirect>
该标签会使URL地址栏的地址发生改变。可通过EL表达式的param对象来获取传递的参数值。
out value="${param.username}"> out>
out value="${param.password}"> out>
输出
liu
123456
使用可选的查询参数来创造一个URL
这个标签在需要的时候会自动重写URL。
var属性用于存储格式化后的URL。
<a href = "<c:url value = "http://www.codeliu.com"/>">这个链接通过<c:url>生成a>
输出
这个链接通过<c:url>生成
函数在上面已经列出来了,我就选了几个写了一下,其实和String的都差不多。不过要记得先在前面引入
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
测试以下几个函数
out value="${fn:contains('Hello world', 'Hello')}"> out>
out value="${fn:contains('Hello world', 'aaaa')}"> out>
out value="${fn:containsIgnoreCase('Hello world', 'hello')}"> out>
输出
true
false
true
个人博客http://www.codeliu.com,欢迎各位志同道合的小伙伴!