1、什么是JSTL 标签库
JSTL 是apache 对EL 表达式的扩展(也就是说JSTL 依赖EL), JSTL 是标签语言!JSTL 标签使用以来非常方便,它与JSP 动作
标签一样,只不过它不是JSP 内置的标签,需要我们自己导包,以 及指定标签库而已!
如果你使用MyEclipse 开发JavaWeb,那么在把项目发布 到Tomcat 时,你会发现,MyEclipse 会在lib 目录下存放jstl 的
Jar 包!如果你没有使用MyEclipse 开发那么需要自己来导入这个 JSTL 的Jar 包:jstl-1.2.jar。
2、JSTL 标签库的作用
用来提升在JSP 页面的逻辑代码的编码效率,使用标签来替换逻辑代码的直接书写,高效,美观,整洁,易读。
3、使用JSTL 标签库
a) 内容:
i. 核心标签库(学习)
ii. 格式化标签库(了解)
iii. 函数标签库(了解)
iv. XML 标签库(了解)
v. SQL 标签库(了解)
b) 使用:
i. 导包
ii. 使用taglib 标签引入资源
iii. 核心标签库
iv.格式化标签库
学习网址:http://www.runoob.com/jsp/jsp-jstl.html
<%--
JSTL学习:
提高jsp中逻辑代码的编写效率,使用标签。
使用:
JSTL的核心标签库(重点)
JSTL的格式化标签库 (讲解)
JSTL的SQL标签库 (了解)
JSTL的函数标签库 (了解)
JSTL的XML标签库 (了解)
JSTL的核心 标签库:
1、导入jar包
2、声明jstl 标签库的引入(核心标签库)
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> (必须有,才能引入特有的标签)
3、内容:
基本标签:
<c:out value="数据" default="默认值"></c:out>
数据可以为常量值 也可以是EL 表达式。
作用:将数据输出给客户端;
<c:set var="hello" value="hello pageContext" scope="page"></c:set>
作用:存储数据到作用域对象中
var: 表示存储的键名
value:表示存储的数据
scope: 表示存储的作用域对象 page request session application
<c:remove var="hello" scope="page"/>
作用:删除作用域中指定的数据
var:表示要删除的键的名字
scope:表示要删除的作用域(可选)
注意:
如果在不指定作用域的情况使用该标签删除数据,会将四个作用域对象中的符合要求的数据全部删除。
<%request.setAttribute("str", "今天是个好天气"); %>
<%
// request.setAttribute("hello", "hello request");
%>
<h3>基本标签学习</h3>
<hr>
<c:out value="哈哈"></c:out>
<c:out value=",${str }"></c:out>
<c:set var="hello" value="hello pageContext" scope="page"></c:set>
<c:set var="hello" value="hello request" scope="request"></c:set>
<c:set var="hello" value="hello session" scope="session"></c:set>
<c:set var="hello" value="hello application" scope="application"></c:set>
<c:out value="${requestScope.hello }"></c:out>
<c:remove var="hello" scope="page"/>
<c:out value="${hello }"></c:out>
<hr />
逻辑标签:
<c:if test="${表达式}">
前端代码:
/c:if>
作用:进行逻辑判断,相当java代码的单分支判断
注意:
逻辑判断边标签需要依赖于EL 的逻辑运算,也就涉及到数据必须从作用域中获取;使用c:set 可以进行赋值。
<c:choose>
<c:when test="">执行内容</c:when>
<c:when test="">执行内容</c:when>
...
<c:otherwise>执行内容</c:otherwise>
</c:choose>
作用:用来进行多条件的逻辑判断,类似java中的多分支 语句
注意:
条件成立只会执行一次,都不成立则执行otherwise
<h3>逻辑标签学习</h3>
<!-- 传统方式 -->
<%
int a = 4;
if(a>3){ %>
<b>今天的天气贼棒</b>
<% }
%><br />
<!-- jstl 方式 -->
<c:set var="a" value="4"></c:set>
<c:if test="${a>3 }">
<b>今天的天气贼棒</b>
</c:if><br />
<c:set var="score" value="55"></c:set>
<c:choose>
<c:when test="${score > 90 }">
<i>奖励吃鸡装备一套</i>
</c:when>
<c:when test="${score >= 80 && score <90 }">
<i>奖励空投箱</i>
</c:when>
<c:when test="${score >70 && score <80 }">
<i>奖励8倍镜子</i>
</c:when>
<c:otherwise>
<i>被淘汰</i>
</c:otherwise>
</c:choose>
循环标签:
<c:forEach begin="1" end="4" step="2">
循环体
</c:forEach>
作用:
循环内容处理
使用:
begin:循环开始位置
end: 循环结束位置
step: 设置步长(自增 数)
vsStatus:声明变量记录每次循环的数据(角标,次数,是否是第一次循环,是否是最后一次循环)
注意:
数据存储在作用域中,需要使用EL 表达式获取
例如:111----${vs.index }----${vs.count }----${vs.first }----${vs.last }<br />
items:声明要遍历的对象,结合EL 表达式获取对象
var : 声明变量记录每次循环的结果,存储在作用域中,需要使用EL 表达式获取
<!-- 传统方式的表格 -->
<table border="1px">
<tr>
<td>课程名称</td>
<td>教师</td>
<td>价格</td>
<td>重要性</td>
</tr>
<%
for(int i=0;i<3;i++){
%>
<tr>
<td>java</td>
<td>张老师</td>
<td>不要钱</td>
<td>非常重要</td>
</tr>
<%} %>
<!-- 使用JSTL 方式完成循环 -->
<!-- 常量循环 -->
<%-- 默认自增为1 step可设置自增数 --%>
<c:forEach begin="0" end="4" step="1" varStatus="vs">
111----${vs.index }----${vs.count }----${vs.first }----${vs.last }<br />
</c:forEach>
<!-- 动态循环 -->
<%
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
request.setAttribute("list", list);
HashMap<String,String> map=new HashMap<String,String>();
map.put("a1", "哈哈哈");
map.put("b1", "嘿嘿");
request.setAttribute("map",map);
%>
<c:forEach items="${list }" var="str">
${str }<br />
</c:forEach>
<!-- 创建表格数据 -->
<table border="1px">
<tr>
<td>课程名称</td>
<td>教师</td>
<td>价格</td>
<td>重要性</td>
</tr>
<c:forEach items="${list }" var="s">
<tr>
<td>${s }</td>
<td>${s }</td>
<td>${s }</td>
<td>${s }</td>
</tr>
</c:forEach>
</table>
<!-- 遍历map 集合 -->
<c:forEach items="${map }" var="m">
${m }---${m.key}<br />
</c:forEach>