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

使用Servlet和JSP开发Java应用程序 ---- JSTL,第1张

使用Servlet和JSP开发Java应用程序 ---- JSTL
  • JSTL
  • JSTL - 核心标记库
    • 变量支持标记
      • c:set标记用于定义变量或修改变量的值
      • c:set设置已经存在的变量的值就是修变量的值
      • 如果不需要一个变量了,可用c:remove标记移除变量
    • 程序控制标记
      • if 标记-用于执行逻辑判断
      • c:choose标记-相当于if....else if....else if....else
      • forEach标记-用于执行循环任务,就是重复的任务,可进行简单的循环,也可用于遍历数组或集合
        • 使用forEach执行简单循环
        • 使用forEach遍历集合

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" />
                
                
                
                <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 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>

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/794052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存