zoukankan      html  css  js  c++  java
  • EL&&JSTL

    EL表达式

    概念

    Expression Language 表达式语言。

    作用

    替换和简化jsp页面中java代码的编写

    语法

    ${表达式}
    

    注意

    jsp默认支持el表达式的。
    如果要忽略el表达式可以使用下面的两种方式:
    方式1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式。
    方式2. ${表达式} :忽略当前这个el表达式。

    EL表达式的使用

    运算

    运算符:
    1.算数运算符: + - * /(div) %(mod)
    2.比较运算符: > < >= <= == !=
    3.逻辑运算符: &&(and) ||(or) !(not)
    4.空运算符: empty

    • 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0

    • ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0

    • ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度 > 0

    示例:

    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>EL表达式</title>
        </head>
        <body>
                
            <%--
                1. 算数运算符: + - * /(div) %(mod)
                2. 比较运算符: > < >= <= == !=
                3. 逻辑运算符: &&(and) ||(or) !(not)
                4. 空运算符: empty
                    功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
    
                    ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
    
                    ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且长度 > 0
            --%>
                
            <h3>算数运算符</h3>
            ${ 1 + 6}<br>
            ${ 9 - 6}<br>
            ${ 2 * 3}<br>
            ${ 2 div 3}<br>
            <%--div 表示乘法运算,mod表示除法运算 --%>
            ${ 9 / 3}<br>
            ${ 9 % 3}<br>
            ${ 9 mod 3}<br>
    
                <h3>比较运算符</h3>
                ${ 1 == 6}<br>
    
                <h3>逻辑运算符</h3>
                ${ 3 > 4 && 3 < 4}<br>
                ${ 3 > 4 and 3 < 4}<br>
    
                <h3>empty运算符</h3>
                
            <%
                String str = "asd";
                String str1 = "";
                request.setAttribute("str",str);
                request.setAttribute("str1",str1);
    
                List list = new ArrayList();
                request.setAttribute("list",list);
            %>
                
            ${str}<br>
            ${empty str1}<br>
            ${empty str}<br>
            ${not empty str}<br>
            ${empty list}<br>
            ${not empty list}<br>
    
        </body>
    </html>
    

    示例运行结果:

    获取值

    el表达式只能从域对象中获取值
    语法:

    1. ${域名称.键名}:从指定域中获取指定键的值
    • 域名称:(四个域从小到大)
      1. pageScope --> pageContext
      2. requestScope --> request
      3. sessionScope --> session
      4. applicationScope --> application(ServletContext)
        • 举例:在request域中存储了name = 张三
        • 获取:${requestScope.nam e}
    1. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

    2. 获取对象、List集合、Map集合的值

      1. 对象:${域名称.键名.属性名}

        • 本质上会去调用对象的getter方法
      2. List集合:${域名称.键名[索引]}

        • 注意,在User.java中如果没有重写tostring方法,出现数组越界时会显示空字符串,即无任何显示,不会报错,如果重写tostring方法,则会报错。
      3. Map集合:

        • ${域名称.键名.key名称}
        • ${域名称.键名["key名称"]}

    示例:

    <%@ page import="domain.User" %>
    <%@ page import="java.util.*" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>el获取数据</title>
        </head>
        <body>
    
            <%
                User user = new User();
                user.setName("哈哈哈");
                user.setAge(22);
                user.setBirthday(new Date());
    
                request.setAttribute("u", user);
                
                List list = new ArrayList();
                list.add("aaa");
                list.add("bbb");
                list.add(user);
    
                request.setAttribute("list", list);
                
                Map map = new HashMap();
                map.put("sname", "嘿嘿嘿");
                map.put("sage", 25);
                map.put("sgender", "女");
                map.put("user", user);
    
                request.setAttribute("map", map);
                
            %>
    
            <h3>el获取域中存储的对象值</h3>
            ${requestScope.u}<br>
            ${requestScope.u.name}<br>
            ${u.name}<br>
            ${u.birStr}<br>
    
            <h3>获取list的值</h3>
            ${list}<br>
            ${list[0]}<br>
            ${list[1]}<br>
            ${list[2].name}<br>
            ${list[2].age}<br>
            ${list[10]}<br>
            <%-- 注意,在User.java中如果没有重写tostring方法后,出现数组越界时会显示空字符串,即无任何显示,不会报错,如果重写tostring方法,则会报错 --%>
    
            <h3>获取Map的值</h3>
            ${map}<br>
            ${map.sname}<br>
            ${map.sage}<br>
            ${map.sgender}<br>
            ${map["sgender"]}<br>
            ${map.user.name}<br>
            ${map.user.age}<br>
            <%--注意,此处的user是键,是""里的user,不是逗号后面的引用,两者只是名称相同--%>
            
        </body>
    </html>
    

    示例运行效果:

    隐式对象

    • el表达式中有11个隐式对象
    • pageContext:可以获取jsp其他八个内置对象
    • 例如:${pageContext.request.contextPath}:动态获取虚拟目录

    示例:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>el隐式对象</title>
        </head>
        <body>
            <%--
            ${pageContext.request.contextPath}:动态获取虚拟目录
            --%>
            
            ${pageContext.request}<br>
            <h3>在JSP页面中动态获取虚拟目录</h3>
            ${pageContext.request.contextPath}<br>
        </body>
    </html>
    

    JSTL

    概念

    JavaServer Pages Tag Library JSP标准标签库

    • 是由Apache组织提供的开源的免费的jsp标签

    作用

    用于简化和替换jsp页面上的java代码

    使用步骤

    1. 导入jstl相关jar包

    2. 引入标签库:taglib指令:

       <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      
    3. 使用标签

    常用的JSTL标签

    1. if:相当于java代码的if语句
      1. 属性:
        • test 必须的属性,接受boolean表达式
        • 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
        • 一般情况下,test属性值会结合el表达式一起使用
      2. 注意:
        • c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签

    示例:

    <%@ page import="java.util.ArrayList" %>
    <%@ page import="java.util.List" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html>
        <head>
            <title>if标签</title>
        </head>
        <body>
    
            <%
    
             //判断request域中的一个list集合是否为空,如果不为null,则遍历集合中的元素
                List list = new ArrayList();
                list.add("aaaa");
    
                request.setAttribute("list", list);
                request.setAttribute("number", 3);
            %>
    
            <c:if test="${not empty list}">
                遍历集合中的元素
            </c:if>
    
            <br>
            <br>
    
            <c:if test="${number % 2 != 0}">
                ${number}为奇数
            </c:if>
    
        </body>
    </html>
    
    1. choose:相当于java代码的switch语句
      • 使用choose标签声明 相当于java中的switch声明
      • 使用when标签做判断 相当于java中的case
      • 使用otherwise标签做其他情况的声明 相当于java中的default

    示例:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
        <head>
            <title>choose标签</title>
        </head>
        <body>
    
            <%--
                数字编号对应星期几实现
                    1.域中存储一数字
                    2.使用choose标签取出数字         相当于switch声明
                    3.使用when标签做数字判断         相当于case
                    4.otherwise标签做其他情况的声明  相当于default
            --%>
    
            <%
                request.setAttribute("number", 3);
            %>
    
            <c:choose>
                <c:when test="${number == 1}">周一</c:when>
                <c:when test="${number == 2}">周二</c:when>
                <c:when test="${number == 3}">周三</c:when>
                <c:when test="${number == 4}">周四</c:when>
                <c:when test="${number == 5}">周五</c:when>
                <c:when test="${number == 6}">周六</c:when>
                <c:when test="${number == 7}">周日</c:when>
                <c:otherwise>输入形式不正确</c:otherwise>
            </c:choose>
    
        </body>
    </html>
    
    1. foreach:相当于java代码的for语句
      • 完成重复的操作

              for(int i = 0; i < 10; i ++){
        
              }
               
              属性:
                  begin:开始值,相当于上面的 i = 0中的0,包括0
                  end:结束值,相当于上面的 i = 10中的10,包括10
                  var:临时变量,相当于上面的变量 i
                  step:步长,相当于临时变量每次增加几
                  varStatus:循环状态对象
                      index:容器中元素的索引,从0开始
                      count:循环次数,从1开始
        
      • 遍历容器

             List<User> list;
             for(User user : list){
        
             }
        
             属性:
                 items:容器对象
                 var:容器中元素的临时变量
                 varStatus:循环状态对象
                     index:容器中元素的索引,从0开始
                     count:循环次数,从1开始
        

    示例:

    <%@ page import="java.util.List" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
        <head>
            <title>foreach标签</title>
        </head>
        <body>
    
            <c:forEach begin="1" end="10" var="i" step="1">
                ${i}<br>
            </c:forEach>
    
            <%
                List list = new ArrayList();
                list.add("aaaa");
                list.add("ssss");
                list.add("dddd");
    
                request.setAttribute("list", list);
            %>
            <c:forEach items="${list}" var="str" varStatus="s">
                ${s.index} ${s.count} ${str}<br>
            </c:forEach>
    
        </body>
    </html>
    

    练习

    • 问题描述:
      在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中,并实现奇偶行变化颜色

    实现:

    <%@ page import="java.util.ArrayList" %>
    <%@ page import="java.util.List" %>
    <%@ page import="domain.User" %>
    <%@ page import="java.util.Date" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
        <head>
            <title>test</title>
        </head>
        <body>
            <%
    
                List list = new ArrayList();
                list.add(new User("哈哈", 22, new Date()));
                list.add(new User("嘿嘿", 23, new Date()));
                list.add(new User("哈喽", 25, new Date()));
                request.setAttribute("list", list);
            %>
    
            <table border="1" width="500" align="center">
                <tr>
                    <th>编号</th>
                    <th>姓名</th>
                    <th>年龄</th>
                    <th>生日</th>
                </tr>
                <%--数据行--%>
                <c:forEach items="${list}" var="user" varStatus="s">
    
                    <c:if test="${s.count % 2 != 0}">
    
                        <tr bgcolor="#ffc0cb">
                            <td>${s.count}</td>
                            <td>${user.name}</td>
                            <td>${user.age}</td>
                            <td>${user.birStr}</td>
                        </tr>
                    </c:if>
    
                    <c:if test="${s.count % 2 == 0}">
    
                        <tr bgcolor="#ff00ff">
                            <td>${s.count}</td>
                            <td>${user.name}</td>
                            <td>${user.age}</td>
                            <td>${user.birStr}</td>
                        </tr>
                    </c:if>
    
                </c:forEach>
            </table>
    
        </body>
    </html>
    

    运行效果:

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/gujun1998/p/11369729.html
Copyright © 2011-2022 走看看