JSP-JSTL标签库

概念

JSP标准标签库(Jsp Standarded Tag Library) ,使用标签取代JSP页面上的Java代码。
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。JSTL标签使用非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库。
如果你使用MyEclipse开发JavaWeb,那么在把项目发布到Tomcat时,你会发现,MyEclipse会在lib目录下存放jstl的Jar包!如果你没有使用MyEclipse开发那么需要自己来导入这个JSTL的Jar包:jstl-1.2.jar。

作用

用来提升在JSP页面的逻辑代码的编码效率,使用标签来替换逻辑代码的直接书写,高效,美观,整洁,易读。

使用

JSTL的核心标签库(c)(重点)
JSTL的格式化标签库(fmt)(学习)
JSTL的SQL标签库(sql)(了解)
JSTL的函数标签库(fn)(了解)
JSTL的XML标签库(x)(了解)
具体JSTL学习可登录网址:http://www.runoob.com/jsp/jsp-jstl.html

JSTL 快速入门

1.在pom.xml导入坐标(导入jar包)

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

2.在JSP页面上引入JSTL标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

3.使用标签

JSTL的核心标签库

基本标签

  <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:表示要删除的作用域(可选)
    注意:
      如果在不指定作用域的情况使用该标签删除数据,会将四个作用域对象中的符合要求的数据全部删除。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    request.setAttribute("str","今天天气真好,适合学习");
    //request.setAttribute("hello","hello request");
%>
<!--基本标签学习  -->
<c:out value="哈哈"></c:out><br />
<c:out value="${str}" default="嘿嘿"></c:out><br />
<c:set var="hello" value="hello pageContext" scope="page"></c:set><br />
<c:set var="hello" value="hello request" scope="request"></c:set><br />
<c:set var="hello" value="hello session" scope="session"></c:set><br />
<c:set var="hello" value="hello application" scope="application"></c:set><br />
<%-- <c:out value="${applicationScope.hello}"></c:out> --%>
<c:remove var="hello" scope="page"/><br />
<c:out value="${hello}"></c:out>
<hr />

逻辑标签

  <c:if test="${表达式}">
    前端代码
  </c:if>
    作用:进行逻辑判断,相当于java代码的单分支判断。
    注意:逻辑判断标签需要依赖于EL的逻辑运算,也就是表达式中涉及到的数据必须从作用域中获取。
<!--传统方式: -->
<%
    int  a=4;
    if(a>3){
%>
<b>今天的天气有点热</b>
<%} %>
<!--jstl方式: -->
<c:set var="a" value="4"></c:set>
<c:if test="${a>3}">
    <b>今天的天气有点热</b>
</c:if>

  <c:choose>

    <c:when test="">执行内容</c:when>
    <c:when test="">执行内容</c:when>
    ...
    <c:otherwise>执行内容</c:otherwise>
  </c:choose>
    作用:用来进行多条件的逻辑判断,类似java中的多分支语句
    注意:条件成立只会执行一次,都不成立则执行otherwise 
<c:set var="score" value="68"></c:set>
<c:choose>
    <c:when test="${score>=90}">
        <i>奖励吃鸡装配一套</i>
    </c:when>
    <c:when test="${score<90&&score>=80}">
        <i>奖励空投箱</i>
    </c:when>
    <c:when test="${score<80&&score>=70}">
        <i>无奖励无惩罚</i>
    </c:when>
    <c:otherwise>
        <i>男女混合双打</i>
    </c:otherwise>
</c:choose>

循环标签

相当于 for 循环。java中有增强for循环和普通for循环,JSTL 中的 <c:forEach> 也有两种用法
用法一:
  类似于 Java 中的增强for循环。涉及到的 <c:forEach> 中的属性如下
  items:被遍历的容器
  var:遍历产生的临时变量
  varStatus:遍历状态对象

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 3 
 4 <!DOCTYPE html>
 5 <html lang="en">
 6 <head>
 7     <meta charset="UTF-8">
 8     <title>Title</title>
 9 </head>
10 <body>
11 <input type="button" value="新增"><br>
12 <hr>
13 <table border="1" cellspacing="0" width="800">
14     <tr>
15         <th>序号</th>
16         <th>品牌名称</th>
17         <th>企业名称</th>
18         <th>排序</th>
19         <th>品牌介绍</th>
20         <th>状态</th>
21         <th>操作</th>
22     </tr>
23 
24     <c:forEach items="${brands}" var="brand" varStatus="status">
25         <tr align="center">
26             <%--<td>${brand.id}</td>--%>
27             <%--<td>${status.index}</td>--%><%--从0开始--%>
28             <td>${status.count}</td><%--从1开始--%>
29             <td>${brand.brandName}</td>
30             <td>${brand.companyName}</td>
31             <td>${brand.ordered}</td>
32             <td>${brand.description}</td>
33             <c:if test="${brand.status == 1}">
34                 <td>启用</td>
35             </c:if>
36             <c:if test="${brand.status != 1}">
37                 <td>禁用</td>
38             </c:if>
39             <td><a href="#">修改</a> <a href="#">删除</a></td>
40         </tr>
41     </c:forEach>
42 </table>
43 </body>
44 </html>

用法二:
  类似于 Java 中的普通for循环。涉及到的 <c:forEach> 中的属性如下
  begin:开始数
  end:结束数
  step:步长
实例代码:
从0循环到10,变量名是 i ,每次自增1

<c:forEach begin="0" end="10" step="1" var="i">
    ${i}
</c:forEach>

重定向标签

      <c:redirect url="/jstl.jsp"></c:redirect>
posted @ 2020-03-27 22:27  溯鸣  阅读(209)  评论(0编辑  收藏  举报