JSP学习笔记(三)---JSTL标签核心库

本文深入解析了JSTL的核心标签库,包括c:out、c:set、c:remove、c:catch、c:if、c:choose、c:forEach、c:forTokens等,详细介绍了它们的用法及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSTL

全称为:JavaServer Pages Standard Tag Library。
这里只学习它的核心标签库(core)。

c:out

用于输出一段文本内容到pageContext对象当前保存的“out”对象中。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <h1>输出常量</h1><hr>
    <c:out value="字符串常量"></c:out>

    <h1>输出变量</h1><hr>
    <%
        String name = "乔帮主";
        pageContext.setAttribute("name", name);
     %>
    <c:out value="${name }"></c:out>

    <h1>输出默认值</h1><hr>
    <%
        String addr = "铁西区";
        //pageContext.setAttribute("addr", addr);
        //如果域中没有该属性,则会输出默认值"沈阳"。
     %>
     <c:out value="${addr }" default="沈阳"></c:out>

  </body>
</html>

c:set

用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="me.zipstream.domain.Person" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <h1>设置或修改域中的属性值</h1><hr>
    <c:set var="name" value="无双" ></c:set><%-- 不设置scope默认值为page --%>
    <c:set var="name" value="韦小宝" scope="request"></c:set>
    ${name }

    <h1>设置或修改域中的Map的值</h1><hr>
    <%
        Map map = new HashMap();
        pageContext.setAttribute("map", map);
     %>
     <c:set target="${map }" property="phoneNum" value="10010"></c:set>
     <c:set target="${map }" property="phoneNum" value="10086"></c:set>
     ${map.phoneNum }

     <h1>修改域中JavaBean的属性的值</h1><hr>
     <%
        Person p = new Person();
        pageContext.setAttribute("p", p);
      %>
      <c:set target="${p }" property="name" value="阿珂"></c:set>
      ${p.name }
  </body>
</html>

c:remove

用于删除各种Web域中的属性。

<c:remove var="varName" [scope="{page|request|session|application}"] /> 

如果没指定scope属性,则会把各个域中所有指定名称的属性值全部删除。
删除后在浏览器显示被删除的属性值。

c:catch

用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:

<c:catch [var="varName"]>nested actions</c:catch>

var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个Web域中。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <c:catch var="e">
        <% 
            int i = 1/0;
        %>
    </c:catch>
    ${e.message }
  </body>
</html>

浏览器输出结果:/ by zero

c:if

<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <c:if test="${2>1 }">
        确实是这样。
    </c:if>
    <c:if test="${2<=1 }">
        你再试试。
    </c:if>
  </body>
</html>

c:choose

<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when><c:otherwise>标签一起使用。使用<c:choose><c:when><c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <% 
        int day = 6;
        pageContext.setAttribute("day", day);
    %>
    <c:choose>
        <c:when test="${day == 1}">
            星期一
        </c:when>
        <c:when test="${day == 2}">
            星期二
        </c:when>
        <c:when test="${day == 3}">
            星期三
        </c:when>
        <c:when test="${day == 4}">
            星期四
        </c:when>
        <c:when test="${day == 5}">
            星期五
        </c:when>
        <c:otherwise>
            周末
        </c:otherwise>
    </c:choose>
  </body>
</html>

c:forEach

用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <h1>遍历数组中的数据</h1><hr>
    <% 
        String[] cities = {"北京", "上海", "深圳", "杭州"};
        pageContext.setAttribute("cities", cities);
    %>
    <c:forEach items="${cities }" var="city">
        ${city }<br>
    </c:forEach>

    <h1>遍历集合中的数据</h1><hr>
    <% 
        List list = new ArrayList();
        list.add("北京");
        list.add("上海");
        list.add("深圳");
        list.add("杭州");

        pageContext.setAttribute("list", list);
    %>
    <c:forEach items="${list }" var="city">
        ${city }<br>
    </c:forEach>

    <h1>遍历Map中的数据</h1><hr>
    <% 
        Map map = new LinkedHashMap();
        map.put("name", "段誉");
        map.put("gender", "男");
        map.put("addr", "大理");
        map.put("wife", "王语嫣");

        pageContext.setAttribute("map", map);
    %>
    <c:forEach items="${map }" var="entry">
        ${entry.key }: ${entry.value }<br>
    </c:forEach>

    <h1>遍历10到100的偶数,如果数字所在的位置是3的倍数,显示成红色</h1><hr>
    <c:forEach begin="10" end="100" step="2" var="i" varStatus="stat">
        <c:if test="${stat.count % 3 == 0}">
            <font color="red">
                ${i }
            </font>
        </c:if>
        <c:if test="${stat.count % 3 != 0}">
                ${i }
        </c:if>
    </c:forEach>

  </body>
</html>

c:forTokens

用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
    <c:forTokens items="www.zipstream.me" delims="." var="str">
        ${str }<br>
    </c:forTokens>
  </body>
</html>

浏览器输出结果:
www
zipstream
me

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值