JSTL标签分类:
1.核心标签库
2.国际化标签
3.数据库标签(不需要学习)
4.XML标签(不需要学习)
5.JSTL函数(EL函数)
常用标签列表:
<c:out>
<c:set>
<c:if>
<c:choose>,<c:when><c:otherwise>标签 (相当于 if...else....)
<c:catch>
<c:param>
<c:forEach>
详细介绍1)<c:out>
输出文本内容显示
属性:
属性名 是否支持EL 属性类型 属性描述
value true Object 指定要输出的内容
escapeXml true Boolean 指定是否将>,<,&,',"等特殊符号进行html编码转换之后再进行输出,默认为true
default true Object 指定如果value属性的值为null是所输出的默认值
案例:
<c : out value='<a href="xxxxx">数据</a>' default = "default值" escapeXml ="false" /><br/>
<c : out value='<a href="xxxxx">数据</a>' default = "default值" escapeXml ="true" /><br/>
<c : out value="${user}" default = "default值" escapeXml ="false" /><br/>
输出结果:
数据
<a href="xxxxx"> 数据 </a>
default
2)<c:set>
标签用于把某一个对象存在指定的域范围内,或者设置域中的java.util.Map类型的属性对象或者javaBean类型的小户型对象的属性:
属性:
属性名 是否支持EL 属性类型 属性描述
value true Object 用于指定属性值
var fasle Object 用于指定要设置的Web域属性的名称
scope false String 用于指定属性所在的web域
target true Object 用于指定设置属性对象,这个对象必须是javaBean对象或者是java.util.Map对象
property true String 用于指定当前对象需要赋值的属性名称
案例:
<!-- 方式一:直接定义一个变量赋值 -->
<c:set value="c:set--->root" scope="session" var="username"></c:set>
${username} <br/>
<!-- 方式二:创建对象之后为对象中的属性赋值 -->
<jsp:useBean id="user" class="com.whatdy.domain.User" scope="session"/>
<c:set property="username" target="${user}" value="userBean--->root"/>
${user.username}<br/>
<!-- 方式三:为map赋值 -->
<%
Map map = new HashMap();
request.setAttribute("data", map); //这个地方必须添加到域中,(本人好忘记添加)
%>
<c:set target="${data}" property="name" value="Map--->root"/>
${data.name}<br/>
结果:
c:set--->root
userBean--->root
Map--->root
方式一中通过使用var属性创建了一个新的变量,也就是说var属性主要是用来创建新的变量的.(感觉叫变量比较合适)
方式三中的map必须往域中进行添加,否则不能找到.
在为map赋值的时候,我们没有设置name这个属性,但是在使用set的时候,会自动生成这个属性.
在这里我要说明一下,需要注意userBean这个标签,在创建对象之前,会先从域中进行查找是否存在这个对象,如果不存在才会创建这个对象.查找顺序:page>request->session->session
3)<c:if>
判断标签
属性:
属性名 是否支持EL 属性类型 属性描述
test true Boolean 判断条件
该标签使用比较简单,如果test中的值为true,就会执行<c:if>标签内部的东西.
4)<c:choose>,<c:when><c:otherwise>标签 (相当于 if...else....)
when标签中的属性.
属性名 是否支持EL 属性类型 属性描述
test true Boolean 判断条件
choose标签 (父)
choose必须配合when,otherwise标签使用.
when标签 (相当于if)
test:如果为true就会执行,(可以使用el表达式)
otherwise标签 (相当于else)
案例:<c:set value="root" scope="session" var="username"></c:set>
<c:choose >
<c:when test="${user.username eq 'root'}">
${user.username}
</c:when>
<c:when test="${user.username eq 'admin'}">
${user.username}
</c:when>
<c:otherwise>
other
</c:otherwise>
</c:choose>
结果:
root
由于上面的user对象中的username的属性的值为root,所以显示的时候会显示第一个when中的内容.
5)<c:catch>
用于捕获嵌套在标签中的内容抛出的异常,格式如下:
<c:catch [var = "varName"] > nested actions</c:catch>
var 属性用于标识<c:cache>标签捕获的异常对象,它将保存在page这个Web域中.
案例:
<c:catch var="myex">
<%
int i =10/0;
%>
</c:catch><br>
异常:<c:out value="${myex.message}"></c:out><br>
结果:
异常:/ by zero
这里的内部代码出现了除数为0的情况,所以爆出异常,然而这个异常我们是不能让用户看见的,所以将其捕获.
6)<c:param>
属性:
属性名 是否支持EL 属性类型 属性描述
name true String 属性的名称
value true Object 属性的值
案例:
<c:url value="/index.jsp" var="myURL">
<c:param name="trackingId" value="12334"></c:param>
<c:param name="reportType" value="summ"></c:param>
</c:url>
<a href="${myURL}"> 首页</a>
点击会跳转到首页,地址栏:
http://localhost:8080/Day1-7/index.jsp?trackingId=12334&reportType=summ
6)<c:forEach>
标签用于对一个集合对象中的元素进行循环迭代操作,或者按照指定的次数重复迭代执行标签中的内容.
属性:
属性名 是否支持EL 属性类型 属性描述
var false String 指定当前迭代到的元素保存到page这个Web域中的属性名称
varstatus false String 记住当前保存迭代信息的对象
items true 任意类型 将要迭代的集合对象
begin true int 表示从第几个开始迭代
end true int
step true int 每次迭代的步长
注意:varstatus属性可以用于制作颜色间隔的表格效果.
案例:
<style type="text/css" >
.add{background-color: #ff99ff;}
.even{background-color: #FF6633;}
tr:hover{background-color: #0000ff; }
table{border-style: none;width: 20%;border: 1px solid #f00}
</style>
<%
int[] number = new int[]{1,2,3,4,5,6,7,8};
request.setAttribute("number", number);
%>
<!-- ${status} 获取到一个对象,这个对象记住了当前第几次迭代 -->
<table >
<c:forEach varStatus="status" var="nu" items="${number}">
<tr class="${status.count%2==0?'even':'odd'}">
<td>${nu}--->${status.count}</td>
</tr>
</c:forEach>
</table>
效果: