使用Servlet和JSP开发Java应用程序 ---- JSTL

JSTL

  • JSP Standard Tag Library - JSP 标准标记库
  • JSTL 是一个标准标记的集合,它可以让您再 JSP 页面中使用标记不是 Java 代码执行任务
  • JSTL 分为以下几组
    • 核心标记库:包含执行基本功能的一些标记,如循环

使用 JSTL 需要添加 JSTL 相关的库,tomcat 服务器不包含 JSTL 的库
所以,使用 tomcat 服务器的情况下,要单独添加 JSTL 相关的 jar 包
在这里插入图片描述

JSTL - 核心标记库

在这里插入图片描述

变量支持标记

c:set标记用于定义变量或修改变量的值

c:set标记用于定义变量或修改变量的值,常用属性有:

  • var:用于指定变量的名称
  • value: 指定变量的值,也可用表达式指定值
  • scope: 指定变量的作用域,四个值:page(默认) | request | session | application

A. 定义不同范围的变量

            <c:set var="number1" value="100" scope="page" />
            <c:set var="number2" value="200" scope="request" />
            <c:set var="number3" value="300" scope="session" />
            <c:set var="number4" value="400" scope="application" />

B. 变量的值也可使用EL表达式或java表达式指定

            <c:set var="number5" value="<%=200 + 300%>" />
            <c:set var="number5" value="${200 + 400}" />

C. 也可在标记内容中给出变量的值

            <c:set var="number7">
                ${300 + 400}
            </c:set>>

使用变量的值,直接使用EL表达式操作变量即可,${变量名},其实就相当于不同域对象中的属性

            <p class="content">
                    number1的值:${number1}
                <br>number2的值:${number2}
                <br>number3的值:${number3}
                <br>number4的值:${number4}
                <br>number5的值:${number5}
                <br>number6的值:${number6}
                <br>number7的值:${number7}
            </p>

在这里插入图片描述

c:set设置已经存在的变量的值就是修变量的值

将number1的值在原来的基础上加上1000

            <c:set var="number1" value="${number1 + 1000}" />
            <p class="content">
                number1的值:${number1}
            </p>

在这里插入图片描述

如果不需要一个变量了,可用c:remove标记移除变量

            <c:remove var="number1" scope="page"/>
            <p class="content">
                number1的值:${number1}
            </p>

在这里插入图片描述

程序控制标记

在这里插入图片描述

if 标记-用于执行逻辑判断

常用属性有:

  • test:指定判断的表达式,如果test的表达式成立,执行if的标记内容,否则不执行不执行标记内容
  • var:如果需要存储表达式的判断结果,可指定一个变量名
  • scope:scope指定变量的范围
                <c:set var="salary" value="6000" />
                
                <!--如果要存储 test 对应的表达式的判断结果,留作后续使用-->
                <!--那么可以使用 var 指定一个变量名,scope 指定变量的作用域-->
                <c:if test="${salary >= 5000}" var="result" scope="page">
                    <p>恭喜你,称为纳税人!!!</p>
                </c:if>

                <p>
                    表达式判断结果存入result的值:${result}
                </p>

在这里插入图片描述

c:choose标记-相当于if…else if…else if…else

c:when标记用于判断一种情况,如果成立,执行when标记内容
c:otherwise标记指定当所有的when都不成立的时候,执行otherwise标记的内容
choose中只会执行一种情况,哪个when先成立,就执行那个when标记的内容。

                <!--c:choose 标记用于包含多个备用条件,在多个条件中选择一个来执行-->
                <!--c:when 标记用于指定一个备用条件-->
                <!--c:otherwise 标记用于指定最后一个备用条件-->
                <c:choose>
                    <c:when test="${score >= 60}">
                        <p>恭喜你,通过了考试~~~</p>
                    </c:when>
                    <c:otherwise>
                        <p>很遗憾,你挂科了!!!</p>
                    </c:otherwise>
                </c:choose>

c:choose 中最好不要写注释

c:choose 中的语句只会输出一条,多个条件之间是互斥的关系 相当于 if … else if … else if … else …

                <c:set var="salary" value="120000" />    
                
                <c:choose>
                    <c:when test="${salary <= 5000}">
                        <p>恭喜你,不用交税!</p>
                    </c:when>
                    <c:when test="${salary <= 10000}">
                        <p>小土豪!</p>
                    </c:when>
                    <c:when test="${salary <= 100000}">
                        <p>大土豪!!</p>
                    </c:when>
                    <c:otherwise>
                        <p>大大大土豪!!!</p>
                    </c:otherwise>
                </c:choose>

在这里插入图片描述

forEach标记-用于执行循环任务,就是重复的任务,可进行简单的循环,也可用于遍历数组或集合

forEach可用于执行普通循环或遍历集合或数组,常用属性有:

  • items:指定要遍历的集合,一般用EL表达式获取
  • var: 一个变量名,用于代指遍历到的当前元素,nameList集合中每个元素都是一个字符串
  • var定义的变量只能在forEach循环内使用,通过EL表达式使用该变量${变量名}
  • step:只能是一个正数,用于指定增长的步长,默认值为1

使用forEach执行简单循环

                <p>
                    <c:forEach begin="1" end="3">
                        | I love you !!! |
                    </c:forEach>
                </p>

在这里插入图片描述

var 用于指定一个变量名,表示当前元素,可以在循环中使用 EL 表达式来操作该变量

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

在这里插入图片描述

使用forEach遍历集合

A. 遍历集合1 - 遍历固定的集合

  • items 属性用于指定要遍历的数组或集合
  • var 属性用于指定一个变量,表示遍历当前的元素,属性定义的变量只能在循环内使用,可以使用 EL 表达式访问该变量
  • 如果指定了 item 属性,那么begin 和 end 表示元素的起始和结束索引,索引从0开始
  • 如果指定了 item 、begin、end 属性,那么 step 步长用于指定索引增长
                <p>
                    <c:forEach items="11,22,33,44,55,66,77" var="item">
                        ${item} | 
                    </c:forEach>
                </p>
                
                <p>
                    <c:forEach items="11,22,33,44,55,66,77" var="item" begin="1" end="3">
                        ${item} | 
                    </c:forEach>
                </p>
                
                <p>
                    <c:forEach items="11,22,33,44,55,66,77" var="item" begin="0" end="3" step="2">
                        ${item} | 
                    </c:forEach>
                </p>

在这里插入图片描述

B. 遍历集合2

                <%
                    List<String> nameList = new ArrayList<>();
                    nameList.add("小胖");
                    nameList.add("小兰");
                    nameList.add("小强");
                    nameList.add("小呆");
                    //为了在EL表达式中可以操作该集合,需要将其作为属性添加到四个域对象中
                    pageContext.setAttribute("list1", nameList);

                    List<Dog> dogList = new ArrayList<>();
                    dogList.add(new Dog("毛毛", "哈士奇", 2));
                    dogList.add(new Dog("强强", "泰迪", 1));
                    dogList.add(new Dog("二哈", "边牧", 3));
                    dogList.add(new Dog("乐乐", "单身狗", 20));
                    request.setAttribute("list2", dogList);

                    List<Product> productList = new ArrayList<>();
                    productList.add(new Product("P001", "avocado", 10));
                    productList.add(new Product("P002", "papaya", 4));
                    productList.add(new Product("P003", "pitaya", 5));
                    productList.add(new Product("P004", "orange", 4));
                    session.setAttribute("list3", productList);

                    Map<String, String> map = new HashMap<>();
                    map.put("2020201111", "Anna1");
                    map.put("2020201112", "Anna2");
                    map.put("2020201113", "Anna3");
                    map.put("2020201114", "Anna4");
                    pageContext.setAttribute("studentMap", map);
                %>

遍历List集合

                <p>
                    <c:forEach items="${pageScope.list1}" var="name">
                        ${
    
    name} | 
                    </c:forEach>
                </p>
                
                <p>
                    <c:forEach items="${requestScope.list2}" var="dog">
                        ${
    
    dog.name} | ${
    
    dog.type} | ${
    
    dog.age} | 
                    </c:forEach>
                </p>
                
                <p>
                    <c:forEach items="${sessionScope.list3}" var="product">
                        ${
    
    product.productId} | ${
    
    product.productName} | ${
    
    product.productPrice} | 
                    </c:forEach>
                </p>

在这里插入图片描述

遍历map集合

                <c:forEach items="${studentMap}" var="student">
                    <p>
                        ${
    
    student.key} | ${
    
    student.value}
                    </p>
                </c:forEach>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_52354698/article/details/124428615