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

news/2024/5/18 12:57:57 标签: java, tomcat, 服务器, jstl

使用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" />
                
                <!--如果要存储 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

java">                <%
                    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集合

java">                <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集合

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

在这里插入图片描述


http://www.niftyadmin.cn/n/1680480.html

相关文章

linux7 nfs固定端口,CentOS7下NFS服务安装及配置固定端口

系统环境&#xff1a;CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64软件版本&#xff1a;nfs-utils-1.3.0-0.48.el7_4.x86_64网络环境中配置了DNS服务器&#xff0c;NFS服务器对应的域名是nfs.st.local&#xff0c;IP是192.168.1.18。配置过程中全部使用域名。一…

自己维护一个简单的ip库

2019独角兽企业重金招聘Python工程师标准>>> 阅读前提&#xff1a; 在阅读之前&#xff0c;请参考知乎上对ip库的一个简要讨论&#xff1a; http://www.zhihu.com/question/19584593 阅读目的&#xff1a;一步一步建立ip库&#xff0c;目前采用的是纯真IP库&#…

putty终端linux怎么粘贴复制粘贴,putty连接linux使时使用tmux复制到windows剪贴板的方法...

以下所有操作都是在windows下面用putty连接linux centos6的情景下。一直很纳闷为什么在tmux模式下不能把复制到的文字放到系统的粘贴板里面呢&#xff1f;通过层层阻碍&#xff0c;终于找到了原因。去掉 ~/.tmux.conf中复制代码代码如下:#设置鼠标可用#setw -g mode-mouse on如…

Stimulsoft Reports 2014.2新版本系统配置说明

2019独角兽企业重金招聘Python工程师标准>>> Stimulsoft宣布软件系统配置变更公告&#xff1a;Stimulsoft Reports 2014.2官方发售版本开始&#xff0c;要求配置.NET Framework 4.0 或更高。 Stimulsoft Reports.Silverlight 需要安装 Silverlight 5。Stimulsoft Re…

CP Editor 编辑器(为竞赛而生的编辑器)的安装与配置

CP Editor 编辑器&#xff08;为竞赛而生的编辑器&#xff09;的安装与配置1. CP Editor 编辑器的下载2. 配置环境变量3. 配置个人化的 CP Editor4. 配置完成测试1. CP Editor 编辑器的下载 CP Editor 编辑器官网 点击下载&#xff0c;选择自己的版本 个人推荐版本&#xf…

第一次自己写的一个报告

这是第一次写的一个报告&#xff0c;我想看看一年后和现在的有多大区别内容在附件里面转载于:https://blog.51cto.com/godisgod/1554341

AcWing 每日一题 2022/5/3【2040. 礼物】

AcWing 每日一题 2022/5/3【2040. 礼物】 农夫约翰想给他的 N 头奶牛购买礼物&#xff0c;但是他的预算只有 B 元。 奶牛 i 希望获得的礼物的价格为 Pi&#xff0c;运输成本为 Si&#xff0c;也就是说约翰要帮奶牛 i 买礼物&#xff0c;共需花费 PiSi 元钱。 约翰有一张特殊…

CentOS源码安装nagios与nagios-plugin

CentOSx64 源码安装nagios与nagios-plugin官方网址&#xff1a;http://www.nagios.org 一、安装指导&#xff1a;http://nagios.sourceforge.net/docs/3_0/quickstart-fedora.html二、nagios的配置1&#xff09;修改/usr/local/nagios/etc/nagios.cnf 文件修改如下&#xff1a;…