JSP标签技术
JSTL标签库是为了JavaWeb开发人员提供的一套标准通用的标签库,JSTL标签库和EL配合使用取代JSP中大部分的java代码
在使用JSTL标签库提供的标签之前,必须在JSP中通过taglib指令引入JSTL标签库。
1.在JSP页面中写入大量的java代码会导致JSP页面中html代码和java代码混杂在一起,会造成页面非常混乱,难以维护
先导入JSTL的jar包,通过taglib引入JSTL标签库
2.于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来道题JSP页面中的java代码,并且推荐,JSP2.0以后不要再JSP页面中出现一行java代码。
3.EL表达式
EL表达式在JSP中可以非常方便的获取数据,可以代替JSP页面中的JSP表达式(<%= %>)
基本结构:${表达式}
EL只能获取不能设置!!!
EL只能获取不能遍历!!!
EL表达式提供了如下功能:
(1)EL可以获取常量、变量(必须存入域中)、表达式的值
<% String name="aaa"; pageContext.setAttribute("name",name); %> ${ name }
(2)EL可以获取域中的数组或集合中的数据
<c:forEach items="${list}" var="prod"> <tr> <td><% List<Porduct> list = (List<Porduct>)request.getAttribute("list"); Porduct po = list.get(0); out.write(String.valueOf(po.getId())); %> <%=po.getId()%> <% out.write("hello"); %> </td> <td>${prod.name }</td> <td>${prod.name }</td> <td>${prod.des }</td> <th> <!-- <span onclick="del()">删除</span> <div id="firstdiv"></div> <span onclick="upd()">修改</span> --> <a id="delProd" href="#">删除</a>| <a id="updProd" href="#">修改</a> </th> </tr> </c:forEach>
EL从域中取数据,查找域的顺序为:
Page > Request > Session > Application
3.JSTL常用属性
3.1 <c:set></c:set> 往四大作用域中添加域属性,或者修改四大作用域中已有的属性
(1)往四大作用域中添加属性
<c:set var="name" value="张三丰"></c:set>
(2)修改四大作用域中已有的属性
如果重复添加相同的属性,值会发生覆盖。相当于修改
<c:set var="name" value="张翠山"></c:set>
(3)修改作用域中Map集合中的属性
<% Map map = new HashMap();
map.put("name","阿凡达");
map.put("gender","1");
%>
<c:set target="${map}" property="name" value="阿凡提"/>
${map.name}
3.2 c_set标签属性总结:
(1)var 指定存入域中属性的名称
(2)value 指定存入域中属性的值
(3)scope 指定将属性保存到哪一个域中
(4)target 指定修改域中的哪一个集合
(5)property 指定修改域中集合中哪一个属性
3.3 <c:if></c:if> 构造if ... else ... 语句
<c:if test="${3>5}>yes</c:if> <c:if test="${!(3>5)}>yes</c:if>
3.4 <c:forEach></c:forEach> 对集合或者数组中的元素进行循环遍历或者是执行指定次数的循环
标签属性总结:
(1)items: 指定需要遍历的集合或数组
(2)var: 指定用于接收遍历过程中的元素
(3)begin 指定循环从哪开始
(4)end 指定循环从哪结束
(5)step 指定循环时的步长
(6)varStatus="status" 返回一个表示循环状态的对象,该对象还具有如下属性:
a)count: 表示当前遍历的元素是第几个
b)first 表示当前遍历的元素是否为第一个
c)last 表示当前遍历的元素是否为最后一个
d)index 表示当前遍历的元素的索引《从零开始》
案例演示:
<!-- 修改map中的数据 --> <% Map map = new HashMap(); map.put("name", "laoli"); map.put("gender", "1"); request.setAttribute("map", map); %> ${map.name } ${map.gender } <br/> <c:set target="${map }" property="name" value="laoqi"></c:set> <c:set target="${map }" property="gender" value="laopo"></c:set> ${map.name } ${map.gender } <br/> <!-- if判断标签 --> <c:if test="${123>112 }">yes</c:if> <c:if test="${!(123>112) }">no</c:if>