1.JSTL介绍
JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
2.JSTL的使用及分类
要使用JSTL,首先要先下载好jar包,点击这里进行下载,下载好后,导入项目的WEN-INF的lib目录下即可,当然,要在jsp中使用JSTL,还得使用@taglib标签,不过不同的分类情况不一样,下面我们来看看JSTL标签的分类。
可以分为4大类和JSTL函数
- 核心标签
- 格式化标签
- SQL标签
- XML标签
- JSTL函数
本文主要介绍核心标签和JSTL函数。
3.五类标签的简介
核心标签:
在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" %>
下面正式开始介绍核心标签。
4.JSTL核心标签
核心标签库共有14个标签,从功能上分为4类
- 表达式控制标签:out,set,remove,catch
- 流程控制标签:if,choose,when,otherwise
- 循环标签:forEach,forTokens
- URL操作标签:import,url,redirect,param
下面开始一个一个介绍。都配代码。
1. out标签的用法
用于在JSP中显示数据,就像<%= … >
<!-- 直接输出常量 -->
<c:out value="第一个JSTL小程序"></c:out>
<%
String name = "CodeTiger";
request.setAttribute("name", name);
%>
<!-- 使用default属性 ,当name1的属性为空时,输出default属性的值-->
<c:out value="${name1}" default="error"></c:out><br>
<!-- 使用escapeXml属性,设置是否对转义字符进行转义,默认为true不转义 -->
<c:out value="<CodeTiger>" escapeXml="false"></c:out><br>
输出
第一个JSTL小程序
error
<CodeTiger>
2.set标签的用法
用于保存数据
<!-- 通过set标签存值到scope中,其中var是变量的名称,value是变量的值,scope表示把变量存在哪个scope中 -->
<c:set var="person1" value="CodeTiger" scope="page"></c:set>
<c:out value="${person1}"></c:out><br>
<!-- 也可以把value的值放在两个标签之间 -->
<c:set var="person2" scope="session">liu</c:set>
<c:out value="${person2}"></c:out><br>
<!-- 通过set标签为JavaBean里的属性赋值 ,首先创建一个JavaBean-->
<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
3.remove标签的用法
用于删除数据
<!-- remove标签的用法 -->
<c:set var="firstName" value="xiaop"></c:set>
<c:out value="${firstName}"></c:out>
<c:set var="lastName" value="liu"></c:set>
<!-- 只能remove某个变量,不能remove掉JavaBean里的属性值 -->
<c:remove var="lastName"/>
<c:out value="${lastName}"></c:out><br>
输出
xiaop
4.catch标签的用法
用来处理产生错误的异常状况,并且将错误信息储存起来
<!-- catch标签的用法 -->
<c:catch var="error">
<!-- 随便使用一个没有定义的JavaBean-->
<c:set target="${Code}" property="Tiger">CodeTiger</c:set>
</c:catch>
<c:out value="${error}"></c:out><br>
输出
javax.servlet.jsp.JspTagException
5.if标签的用法
与我们在一般程序中用的if一样
<!-- if标签的用法 -->
<form action="index.jsp" method = "post">
<!-- param为EL的隐式对象,获取用户输入的值 -->
<input type = "text" name = "score" value = "${param.score}">
<input type = "submit" value = "提交">
</form>
<!-- var中的变量为boolean类型,取决于test中的表达式 -->
<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>
输出
6.choose,when,otherwise标签的用法
这三个合在一起讲,有点类似switch case default。
choose:本身只当做<c:when>和<c:otherwise>的父标签
when:<c:choose>的子标签,用来判断条件是否成立
otherwise:<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
接上面的form表单
<!-- choose,when,otherwise标签的用法 -->
<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>
输出
7.forEach标签的用法
基础迭代标签,接受多种集合类型
<!-- forEach标签的用法 -->
<%
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>
<!-- 获取部分值 并指定varStatus-->
<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这几个状态。
8.forTokens标签的用法
根据指定的分隔符来分隔内容并迭代输出
<!-- forTokens标签的使用 -->
<c:forTokens items="010-12345-678" delims="-" var="num">
<c:out value="${num}"></c:out><br>
</c:forTokens>
输出
010
12345
678
9.import标签的用法
检索一个绝对或相对 URL,然后将其内容暴露给页面
该标签和<jsp:include>的区别:<jsp:include>只能包含同一个web应用中的文件,而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
该标签只是把URL属性中的资源加载到页面中,URL地址栏的地址不会改变。
<!-- import标签的用法 绝对路径-->
<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>
<!-- 使用context属性 ,前面要加/,导入MyFirstJSP项目中的index.jsp页面-->
<c:catch var="error3">
<c:import url="/index.jsp" context="/MyFirstJSP"></c:import>
</c:catch>
<c:out value="${error3}"></c:out><br>
10.redirect,param标签的用法
redirect:重定向至一个新的URL.同时可以在url中加入指定的参数
param:用来给包含或重定向的页面传递参数
<!-- redirect标签的用法 -->
<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对象来获取传递的参数值。
<c:out value="${param.username}"></c:out><br>
<c:out value="${param.password}"></c:out><br>
输出
liu
123456
11.url标签的用法
使用可选的查询参数来创造一个URL
<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。
这个标签在需要的时候会自动重写URL。
var属性用于存储格式化后的URL。
<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。
<!-- url标签的用法 -->
<a href = "<c:url value = "http://www.codeliu.com"/>">这个链接通过<c:url>生成</a>
输出
这个链接通过<c:url>生成
我们看看网页源代码
5.JSTL函数的使用
函数在上面已经列出来了,我就选了几个写了一下,其实和String的都差不多。不过要记得先在前面引入
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
测试以下几个函数
<c:out value="${fn:contains('Hello world', 'Hello')}"></c:out><br>
<c:out value="${fn:contains('Hello world', 'aaaa')}"></c:out><br>
<c:out value="${fn:containsIgnoreCase('Hello world', 'hello')}"></c:out><br>
输出
true
false
true
好了,大概也就说这么多了。
个人博客http://www.codeliu.com,欢迎各位志同道合的小伙伴!