1. JSTL标签库概述
JSTL全称为JavaServerPages Standard Tag Library。
由JCP(Java Community Process)指定标准。
是提供给 Java Web 开发人员一个标准通用的标签函数库。
可以和 EL 配合来取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性。 EL表达式获取值 ,jstl标签是一些结构书写
2. jstl引入
在java ee5及其以上版本,已经默认包含了jstl标签库,可以直接直接使用。
再通过指令确定引入的标签库名称:
<%@taglib uri="" prefix=""%> uri="地址" prefix简称
3. 拓展:命名空间或名称空间概述
在通过taglib指令引入标签的时候,需要指定一个名称空间URN。这个URN中的内容看似是一个地址,但是实际上表示的是一个名字。书写形式为地址的原因是希望做到每一个指定标签库规范的人都可以有唯一一份规范,避免两两之间相互重复。
a. 在使用jstl标签库时,需要通过taglib标签引入,其中uri包含的内容是一个地址,但是这个地址其实是一个命名空间(URN)。
b. URI中包含URL和URN两部分。其中URN是作为一个唯一的名称空间来使用,目的是确定网络中当前jstl标签库仅此一个,不会出现引入的错误。
c.URN的编写方式:http://域名/分级1/分级2/分级3…
URI相当于北京市徐帅 URL 相当于地球中国北京某某公司徐帅 因为北京市可能在火星上也有 所以URI的范围比URL的范围大,
4. taglib可以引入的标签库
core ---- 核心标签库 c库
fmt ---- 国际标签库
sql ---- sql标签库
xml ---- xml标签库
a. taglib指令引入core库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
设置完以后 c就可以替代 http://java.sun.com/jsp/jstl/core ,所以把c称之为简称 它可以是其他的比如b,e。。。名字随意取
5. JSTL标签库中常用标签
a. <c:set>
a. 设置/修改域中属性。
scope:是域的意思 就是你要向那个域设置值
var:相当于原来设置变量的name
value 相当于设置的变量的值
target:代表的是目标,也就是在整个域中寻找一个目标,然后可以修改目标的name和值 ,里面的el表达式用的是{$ a} 自动寻找域
property:属性的意思,可以设置map中键的值和对象的属性
<c:set scope="request" var="name" value="zs"></c:set> 相当于原来的<%request.setAttribute("name","zs");%>
<h3>c:set设置域中值</h3> <c:set scope="page" var="a" value="abc"></c:set> <c:set scope="request" var="a" value="123"></c:set> <c:set scope="session" var="a" value="789"></c:set> <c:set scope="application" var="a" value="114"></c:set> ${pageScope.a } abc ${requestScope.a} 123 ${sessionScope.a } 789 ${applicationScope.a } 114 ${a} 自动寻值从小到大的范围找 abc <h4>修改域中的值</h4> <c:set scope="request" var="a" value="曹洋"></c:set> ${requestScope.a} 曹洋
b.设置和修改map中的值
<h3>c:set设置map中的值</h3> <% Map<String,String> map = new HashMap<String,String>(); pageContext.setAttribute("map", map); %> <c:set target="${map}" property="name" value="小朴朴"></c:set> ${map} 结果:{name,小朴朴} ${map.name } 结果:小朴朴 <h4>修改map中的值</h4> <c:set target="${map }" property="name" value="小兰兰"></c:set> ${map } 结果:{name,小兰兰} ${map.name } 结果:小兰兰
c.修改javaBean中的值
<h3>javabean中值的修改</h3> <% Person p = new Person("李帅",19,"女"); pageContext.setAttribute("p", p); %> ${p.name } <c:set target="${p}" property = "name" value="小帅帅"></c:set> ${p.name } <!-- javabean中如果没有对应addr属性的set方法提供,则不能随意设置新的属性 --> <%-- <c:set target="${p }" property="addr" value="河北"></c:set> --%> <%-- ${p.addr } --%>
d.c:remove移除域中属性
<h3>c:remove移除域中属性</h3> <c:set scope="page" var="name" value="谢逊"></c:set> <c:set scope="request" var="name" value="韦一笑"></c:set> <c:set scope="session" var="name" value="殷天正"></c:set> <c:set scope="application" var="name" value="黛绮丝"></c:set> ${pageScope.name } ${requestScope.name } ${sessionScope.name } ${applicationScope.name} ${name } <hr> <!-- 删除指定域中的数据 --> <c:remove var="name" scope="request" /> ${pageScope.name } ${requestScope.name } ${sessionScope.name } ${applicationScope.name} <hr> <!-- 如果不指定删除哪一个域,则将全部域中对应的属性删除 --> <c:remove var="name"/> ${pageScope.name } ${requestScope.name } ${sessionScope.name } ${applicationScope.name}
e.c:if判断结构
<h3>c:if 判断结构</h3> <c:set var="num" value="100" scope="request"></c:set> <c:if test="${num<100}" var="flag"> //test就是if()判断语句中的内容 var代表的是当前判断的结果true or false num小于100 var中的变量值不能相同,即使相同那么就是指定var中变量的域,要再加一个属性scope </c:if> ${flag } <c:if test="${num>=100}" var="flag1"> num大于等于100 </c:if> ${flag1}
f:c:choose选择判断结构
首个满足条件的进行输出
<h3>c:choose选择判断结构</h3> <c:choose> <c:when test="${num<100 }">num小于100</c:when> //test中间用的是el的条件判断 <c:when test="${num<1000 }">num小于1000</c:when> <c:when test="${num<10000 }">num小于10000</c:when> <c:otherwise>num大于等于10000</c:otherwise> </c:choose>
g.c:forEach 循环结构
先来看看起始标签可以用到的属性
begin: 开始下标 从0开始
end: 结束下标
items:
step: 步长就是一次循环 加几,默认为1
var: 每次循环拿到的元素
varStatus:代表每一个遍历到的元素的状态,如下表
index 指下标 count指遍历到的元素的个数
原文:https://www.cnblogs.com/xuwangqi/p/11370328.html