Jsp 常用标签

常用 jsp 标签

一、介绍

1. 什么是 JSTL

  • JSTL 是 java 中的一个定制标记库集

2. 为什么要使用 JSTL

  • 实现了 JSP 页面中的代码复用

    ​ 基于标签库原理,重复率较高的代码块支持复用,提高效率

  • 书写 JSP 页面时可读性更强

    ​ 长得很像 XML,方便前端查看和参与开发

3. 使用方法

  1. 导入 jstl.jar 和 standard.jar
  2. <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
  3. 正常书写 JSTL

4. JSTL 标签的四大分类及 JSTL 函数

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签

5. EL 表达式

  • 什么是 EL 表达式

    全名是 Expression Language
    经常与 JSTL 配合使用,使得 JSP 页面更直观,写法更方便

  • 写法对比

    • 普通写法: <%=session.getValue("name") %>
    • EL 表达式写法:<c:out value="${sessionScope.name}" />
  • EL 表达式的格式

    ​ 用美元符号” $ “定界,内容包含在花括号” { } “中

    ${表达式}

  • “ . ” 与 “ [ ] ” 运算符

    • 通常情况是通用的 ${user.sex} = ${user["sex"]}

    • ” [ ] ” 还可以用来进行集合元素中的定位 ${booklist[0].price}

    • 除两种情况外

      1. 包含特殊字符

      ${user.first-name} × ${user["first-name"]}

      1. 通过变量动态取值,只能使用 ” [ ] “
  • EL 变量

JSP 内置对象 EL 名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope

当没有限定范围,如 ${username} ,依此从上到下查找,如果都没找到,返回一个空字符串

  • EL 自动类型转换

    • 要取得文本框中的输入,我们需要做类型转换

    • 常规:

      String str_count = request.getParameter("count");
      int count = Integer.parseInt(str_count);
      count += 20;
    • EL:

      ${param.count + 20}
      <!-- param.count 等价于 request.getParameter("count")-->
  • EL 运算符
类别 运算符
算术运算符
        / %
关系运算符 == != < > <= >=
逻辑运算符 && || !
验证运算符 empty(为空返回 ture)

二、JSTL 标签

1. 常用核心标签介绍

  • JSTL 的核心标签库共 13 个,从功能上可以分为 4 类
    • 表达式控制标签:out set remove catch
    • 流程控制标签:if choose when otherwise
    • 循环标签:forEach forTokens
    • URL 操作标签:import url redirect

2. out 标签

  • 用法

    • 输出常量

    可在 value 属性中直接赋值

    • 输出变量

    变量不存在可配合 defalut 属性输出默认值,还可通过 escapeXml 控制转义字符的输出方法

  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>out 标签</h1>
    <hr>
    <!-- 使用 out 标签输出常量 -->
    <c:out value="这是常量"></c:out>
    <br>
    
    
    <!-- 使用 out 标签输出变量 -->
    <!-- 直接输出变量 -->
        <%
            session.setAttribute("name", "这是变量");
        %>
        <c:out value="${name}"></c:out>
        <br>
    
    <!-- 当变量不存在,通过 defalut 属性输出默认值 -->
        <c:out value="${user}" default="默认值"></c:out>
        <br>
    
    <!-- 设置输出转义后的字符需要将 escapeXml 属性设置为 false -->
        <c:out value="&lt转义&gt" escapeXml="false"></c:out>
        <br>
        <c:out value="&lt没转义&gt" escapeXml="true"></c:out>

3. set 标签

  • 用法

    • 存值到 scope 中

    可将值以变量形式存放在指定的范围中(两种方式,以 value 属性,或者以标签的值)

    • 存值到 JavaBean 的属性中

    需要配合 target 属性指定对象并且通过 property 属性指定要赋值给对象中的哪个属性

  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <jsp:useBean id="person" class="beans.Person"></jsp:useBean>
    <h1>set 标签</h1>
    <hr>
    <!-- 存值到 scope 中 -->
    <!-- 以 value 属性性质存值 -->
        <c:set value="today" var="day" scope="session"></c:set>
        <!-- 同 session.setAttribute("day","today") -->
        <c:out value="${day}"></c:out><br>
    
    <!-- 以标签值形式存值 -->
        <c:set var="month" scope="application">8</c:set>
        <c:out value="${month}"></c:out><br>
    
    
    <!-- 通过 set 标签向 person 中赋值 -->
    <c:set target="${person}" property="name" value="二狗"></c:set>
    <!-- target 对应上面的 useBean 中的 id 属性 -->
    <!-- name 代表要赋值 javaBean 的属性 -->
    <c:out value="${person.name}"></c:out>&nbsp;&nbsp;&nbsp;
    <c:set target="${person}" property="age" value="22"></c:set>
    <c:out value="${person.age}"></c:out><br>
    
    <!-- 或者 -->
    <c:set target="${person}" property="name">二狗</c:set>
    <c:out value="${person.name}"></c:out>&nbsp;&nbsp;&nbsp;
    <c:set target="${person}" property="age">22</c:set>
    <c:out value="${person.age}"></c:out>

4. remove 标签

  • 用法

    • remove 掉某个变量
    • var 属性必选
    • scope 属性可选
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>remove 标签</h1>
    <hr>
    <!-- 先为 day 赋值 today -->
    <c:set value="today" var="day" scope="session"></c:set>
    <!-- 有输出 -->
    <c:out value="${day}"></c:out>
    <br>
    <!-- remove 掉 day -->
    <c:remove var="day"></c:remove>
    <!-- 已经没有 day 属性,没有输出 -->
    <c:out value="${day}"></c:out>

5. catch

  • 用法

    • catch 标签中可以包含那些容易出错的 JSTL 标签
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>catch 标签</h1>
    <hr>
    <!-- 用 catch 捕捉出错信息并存储到 error 变量 -->
    <c:catch var="error">
    <!-- 写数据到不存在的 javaBean 属性中 -->
    <!-- 以便抛出错误 -->
    <c:set property="22" target="${222}" >ss</c:set>
    </c:catch>
    <!-- 输出 error -->
    <c:out value="${error}"></c:out>

6. if 标签

  • 用法

    同程序中的 if 作用相同,用来实现分支条件控制

    • test 属性用于存放判断的条件,一般使用 EL 表达式来编写
    • var 指定名称用来存放判断的结果类型为 true 或 false
    • scope 用来存放 var 属性存放的范围
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>if 标签</h1>
    <hr>
    <form action="if.jsp" method="post">
    <input type="text" name="score" value="${param.score}"/>
    <input type="submit"/>
    </form>
    <!-- 当 90<=成绩 为优秀 -->
    <c:if test="${param.score >= 90}" scope="session" var="status">
    <c:out value="恭喜您!您的成绩是优秀"></c:out>
    </c:if>
    <!-- 当 80<=成绩<90 为良好 -->
    <c:if test="${param.score >= 80 && param.score < 90}" scope="session" var="status">
    <c:out value="恭喜您!您的成绩是良好"></c:out>
    </c:if>
    <!-- 当 70<=成绩<80 为中等 -->
    <c:if test="${param.score >= 70 && param.score < 80}" scope="session" var="status">
    <c:out value="恭喜您!您的成绩是中等"></c:out>
    </c:if>
    <!-- 当 60<=成绩<70 为及格 -->
    <c:if test="${param.score >= 60 && param.score < 70}" scope="session" var="status">
    <c:out value="恭喜您!您的成绩是及格"></c:out>
    </c:if>
    <!-- 当 成绩<60 为不及格 -->
    <c:if test="${param.score < 60}" scope="session" var="status">
    <c:out value="恭喜您!您的成绩是不及格"></c:out>
    </c:if>

7. choose、when、otherwise 标签

  • 用法

    类似于 switch,实现分支控制

    • 通常三个标签配合使用
    • choose 标签内嵌套 when 和 otherwise 标签使用
    • 或 choose 标签嵌套 when 标签使用
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>choose、when、otherwise 标签</h1>
    <hr>
    <form action="choose.jsp" method="post">
    <input type="text" name="score" value="${param.score}"/>
    <input type="submit"/>
    </form>
    <!-- 第一种,choose 内嵌套 when 和 otherwise -->
    <!-- 当符合条件时为 when,否则为 otherwise -->
    <c:choose>
        <c:when test="${param.score >= 90 && param.score <=100}">
            <c:out value="恭喜您!您的成绩是优秀"></c:out>
        </c:when>
        <c:when test="${param.score >= 80 && param.score < 90}">
            <c:out value="恭喜您!您的成绩是良好"></c:out>
        </c:when>
        <c:when test="${param.score >= 70 && param.score < 80}">
            <c:out value="恭喜您!您的成绩是中等"></c:out>
        </c:when>
        <c:when test="${param.score >= 60 && param.score < 70}">
            <c:out value="恭喜您!您的成绩是及格"></c:out>
        </c:when>
        <c:when test="${param.score >= 00 && param.score < 60}">
            <c:out value="恭喜您!您的成绩是不及格"></c:out>
        </c:when>
        <c:otherwise>
            <c:out value="你的输入有误!!"></c:out>
        </c:otherwise>
    </c:choose>
    <br>
    <!-- 第二种,choose 内嵌套 when -->
    <c:choose>
        <c:when test="${param.score==100}">
            <c:out value="您是第一名!!"></c:out>
        </c:when>
    </c:choose>

8. forEach 标签

  • 用法

    根据循环条件遍历集合中的元素

    • var 设定变量名用于存储从集合中取出的元素
    • items 指定要遍历的集合
    • begin、end 用于指定遍历的起始位置和终止位置,默认分别为 0 和 items.size()-1
    • step 指定循环的步长,默认为 1
    • varStatus 通过几个状态值,描述 [begin,end] 子集中元素的状态
    • index 返回当前元素在整个集合中的索引值
    • count 返回当前元素在子集中的计数值
    • first 当前元素是否是子集第一个元素,是返回 true
    • last 当前元素是否是子集最后一个元素,是返回 true
  • Demo

    “`jsp
    <%@ page language=”java” contentType=”text/html; charset=utf-8”%>
    <%@ page import=”java.util.*” %>
    <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>

    foreach 标签


8. forTokens 标签

  • 用法

    用于浏览字符串,并根据指定的字符将字符截取

    • items 指定被迭代的字符串
    • delims 指定使用的分隔符
    • var 指定用来存放分割的子串名称
    • begin、end 用于指定遍历的起始位置和终止位置,默认分别为 0 和 items.size()-1
    • step 指定循环的步长,默认为 1
    • varStatus 通过几个状态值,描述 [begin,end] 子集中元素的状态
    • index 返回当前元素在整个集合中的索引值
    • count 返回当前元素在子集中的计数值
    • first 当前元素是否是子集第一个元素,是返回 true
    • last 当前元素是否是子集最后一个元素,是返回 true
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>forTokens 标签</h1>
    <hr>
    <!-- 从 items 指定的字符串中,以 - 为分隔符分割 -->
    <c:forTokens items="123-456-789-987" delims="-" var="num">
    <c:out value="${num}"></c:out><br>
    </c:forTokens>

9. import 标签

  • 用法

    可以把其他动态或静态文件包含到本 jsp 页面中

    • 与 < jsp:include> 区别:
    • include 只能包含同一个 web 应用中的文件
    • import 可以包含其他 web 应用中的文件,甚至是网络上的资源
    • url 被导入资源的 URL 路径
    • context 相同服务器下其他的 web 工程,必须以 “/” 开头
    • var 以 String 类型存入被包含文件的内容
    • scope var 变量的 jsp 范围
    • charEncoding 被导入文件的编码格式
    • varReader 以 Reader 类型存储被包含文件内容
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>import 标签</h1>
    <hr>
    <!-- 导入网络上的路径 -->
    <!-- 由于导入的是网络上的资源,可能抛出错误 -->
    <c:catch var="error00">
        <c:import url="https://www.baidu.com/" charEncoding="utf-8"></c:import>
    </c:catch>
    <c:out value="${error00}"></c:out>
    
    <!-- 导入相对路径的文件 -->
    <c:catch var="error01">
        <!-- 将 out.jsp 页面导入到该 jsp 页面,并将网页内容以 String 类型保存入 ss -->
        <c:import url="out.jsp" charEncoding="utf-8" var="ss"></c:import>
        <c:out value="${ss}"></c:out><br>
    </c:catch>
    <c:out value="${error01}"></c:out>

10. redirect 标签

  • 用法

    用来实现请求的重定向,同时可以在 url 中加入指定的参数

    • url 指定重定向页面的地址
    • context 用于导入其他 web 页面中的页面
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>redirect 标签</h1>
    <hr>
    <!-- 重定向到其他页面 -->
    <c:redirect url="if.jsp">
        <!-- 包含重定向时要传递的参数 -->
        <!-- 参数键值对会跟着重定向的 url 地址后 -->
        <c:param name="username" value="2333"></c:param>
        <c:param name="password" value="123"></c:param>
    </c:redirect>

11. url 标签

  • 用法

    用于动态生成一个 String 类型的 URL

    • value 表示 url 路径值
    • var 存储 url 路径的变量名
    • scope var 变量的范围
  • Demo

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <h1>url 标签</h1>
    <hr>
    <!-- 判断是否添加 partUrl 变量 -->
    <c:if test="${3>=1}">
    <c:set var="partUrl">aa</c:set> 
    </c:if>
    <!-- 拼接成新 Url 地址 -->
    <c:url value="http://localhost:8080/${partUrl}" var="newUrl" scope="session"></c:url>
    <a href="${newUrl}">URL</a>

猜你喜欢

转载自blog.csdn.net/liyuanyue2017/article/details/81873078