• EL表达式和JSTL标签库


    expresion language表达式语言

    可以输出表达式的值。跟jsp的表达式脚本一样。计算表达式的值后输出。 
     EL表达式出现的目的是为了使JSP写起来更加简单,让jsp的代码更佳简化。

    1、搜索数据的顺序:pageContent、request、session、Application

    2、获取javaBean普通属性、数组属性、List集合属性,以map属性中的数据。

    ${  user.username  }    // 获取user对象中。username属性值

    ${  list[0]  }                     // 访问有序集合(或数组)中给定索引的元素

    ${  map.key  }                        // 访问map集合中指定key的属性值

    ${      map[“key”]       }                 // 访问特殊字符串的key的属性值

    <%--访问 对象的username 属性--%>

    user对象的username属性值---->>>>${ user.username }<br/><br/>

     

    <%--访问user对象中数组的第二个元素--%>

    user对象中phones数组的第二个元素-------->>>>${ user.phones[1] }<br/><br/>

     

    <%--访问 list集合 中第一个元素--%>

    list集合中第一个元素-------->>>>>${ user.strList[0] }<br/> <br/>

     

    <%--访问 user对象中map集合的aaa的属性值 --%>

    user对象中map集合中aaa属性的值----->>>>>${ user.map.aaa }<br/><br/>

     

    empty运算是判断一个对象或者集合是否为空。返回boolean值。

    对象为null时,返回true

    如果是空的字符串,返回true

    如果是空的Object数组(Object数组.length == 0),返回true

    空的集合,返回true

    空的map,返回true

    <%--request.getAttribute("msg") == null ? "请输入用户名和密码" :request.getAttribute("msg")--%>

    等效于  ${empty requestScope.msg ? "请输入用户名和密码":requestScope.msg}

     还有 not empty

                <c:choose>    
                    <c:when test="${not empty sessionScope.cart}">
                        <c:forEach items="${sessionScope.cart.items}" var="item">
                            <tr>
                                <td>${item.value.name}</td>
                                <td>${item.value.count }</td>
                                <td>${item.value.price }</td>
                                <td>${item.value.totalMoney }</td>
                                <td><a href="#">删除</a></td>
                            </tr>    
                        </c:forEach>
                    </c:when>
                    <c:otherwise>
                        <td colspan="5"><a href="index.jsp">购物车为空,去购物商品吧!</a></td>
                    </c:otherwise>
                </c:choose>
    <c:when> 配合<c:choose>一起使用,类似switc语句 
    
    

    1.4、EL表达式中11个隐含对象。

    EL表达式 中隐含11个对象,这11个对象我们都可以直接使用!!!

    隐含对象

    类型

    说明

    pageContext

    javax.servlet.jsp.PageContext

    就是JSP页面中的pageContext对象

    pageScope

    java.util.Map<String,Object>

    Page范围属性名和属性值

    requestScope

    java.util.Map<String,Object>

    Request范围属性名和属性值

    sessionScope

    java.util.Map<String,Object>

    Session范围属性名和属性值

    applicationScope

    java.util.Map<String,Object>

    Web应用范围属性名和属性值

    param

    java.util.Map<String,String>

    对应一个请求参数

    paramValues

    java.util.Map<String,String[]>

    对应一组请求参数

    header

    java.util.Map<String,String>

    请求头

    headerValues

    java.util.Map<String,String[]>

    请求头返回字符数组

    cookie

    java.util.Map<String, Cookie>

    获取某个cookie对象

    initParam

    java.util.Map<String, String>

    获取应用<context-param>初始化参数

    1.5、EL表达式获取域对象中的数据(****重点)

    pageScope                       <=== 对应 ===>              pageContext        域中的属性

    requestScope                  <=== 对应 ===>              request                域中的属性

    sessionScope                   <=== 对应 ===>              session                 域中的属性

    applicationScope               <=== 对应 ===>              ServletContext    域中的属性

    JSTL标签库

    JSTL标签库 全称是指 JSP Standard Tag Library  JSP标准标签库。是一个不断完善的开放源代码的JSP标签库。

    EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个jsp页面变得更佳简洁。

    JSTL由五个不同功能的标签库组成。

    功能范围

    URI

    前缀

    核心标签库--重点

    http://java.sun.com/jsp/jstl/core

    c

    格式化

    http://java.sun.com/jsp/jstl/fmt

    fmt

    函数

    http://java.sun.com/jsp/jstl/functions

    fn

    数据库(不使用)

    http://java.sun.com/jsp/jstl/sql

    sql

    XML(不使用)

    http://java.sun.com/jsp/jstl/xml

    x

                在jsp标签库中使用taglib指令引入标签库
      CORE 标签库

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

      XML 标签库

        <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

      FMT 标签库 

        <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

      SQL 标签库

        <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

      FUNCTIONS 标签库

        <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

     平时使用最多的是核心库:

      CORE 标签库

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

    核心库几个常用的标签:

    <c:out>标签

    <c:out>标签用来输出一个表达式的结果,与<%= %>作用相似。

    举例来说,如果想要访问customer.address.street,只需要这样写:<c:out value="${customer.address.street}">。

    <c:out>标签会自动转义特殊字符,所以它们不会被当做标签来处理。

    value:要输出的内容

    <body>
        <%
            Map<String,String> map = new HashMap<String,String>();
            map.put("username", "wzg168");
            map.put("data", "<b>这是b标签</b>");
            pageContext.setAttribute("map", map);
        %>
        username:<c:out value="${ map.username }" default="默认值" /><br/>
        data-escapeXml=true:<c:out value="${ map.data }" default="默认值" escapeXml="true"/><br/>
        data-escapeXml=false:<c:out value="${ map.data }" default="默认值" escapeXml="false"/><br/>
        abc:<c:out value="${ map.abc }" default="默认值" /><br/>
    </body>

    <c:set>标签 用于 添加 或 修改 域中的属性。

    <c:remove>标签:从域对象中移除一个属性。

    <body>
    <!-- 添加一个属性 -->
    <c:set scope="page" var="abc" value="abc_Value"/>
    添加后:${ pageScope.abc }<br/>
    <!-- 删除abc属性 -->
    <c:remove scope="page" var="abc"/>
    删除后:${ pageScope.abc }<br/>
    </body>

    <c:if>标签 判断表达式的值,如果表达式的值为 true 则执行其主体内容。

    <body>
        <!-- 判断 12 == 12 -->
        <c:if test="${ 12 == 12 }">
            <h1>12 == 12 为真</h1>
        </c:if>
        <!-- 把判断的结果保存到作用域中 -->
        <c:if test="${ 12 == 13 }" scope="page" var="a"></c:if>
        <%-- 输出page作用域中的a对象 --%>
        <c:out value="${ pageScope.a }"></c:out>
    </body>

    <c:choose>、<c:when>、<c:otherwise>标签(常用****)

    <c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。

    switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。

    <body>
        <%
            // 保存一个分数
            pageContext.setAttribute("score", 90);
        %>
        <%-- 开始判断 --%>
        <c:choose>
            <%-- 如果成绩大于等于 90分 --%>
            <c:when test="${ pageScope.score >= 90 }">
                成绩为A
            </c:when>
            <%-- 如果成绩大于等于 80分 --%>
            <c:when test="${ pageScope.score >= 80 }">
                成绩为B
            </c:when>
            <%-- 如果成绩大于等于 70分 --%>
            <c:when test="${ pageScope.score >= 70 }">
                成绩为C
            </c:when>
            <%-- 如果成绩大于等于 60分 --%>
            <c:when test="${ pageScope.score >= 60 }">
                成绩为D
            </c:when>
            <%-- 其他情况 --%>
            <c:otherwise>
                成绩为E,不及格
            </c:otherwise>
        </c:choose>
    </body>

    <c:forEach>标签(****重点)

    <c:forEach>标签是迭代一个集合中的对象-可以是数组,也可以是list,也可以是map对象。

    <c:url>标签:

    主要是用来生成一个url地址,添加到一个域属性中。还可以在生成地址的同时添加请求参数。

    如果请求的参数中带有中文,还会自动的做编码的操作

    <body>
        <!-- 1) 使用相对路径生成url保存到 (只能在当前工程下) -->
        <c:url var="url1" value="/a.jsp" scope="page" >
            <c:param name="username" value="wzg168"></c:param>
            <c:param name="data" value="中文"></c:param>
        </c:url>
        ${ pageScope.url1 }<hr/>
        <!-- 2) 使用绝对路径生成url保存到 (一定要以斜杠打头,可以修改上下文路径) -->
        <c:url var="url2" value="/b.jsp" scope="page" context="/day08" />
        ${ pageScope.url2 }<hr/>
        <!-- 3) 生成url 直接输出 (只能有value属性和context属性) -->
        <c:url value="/c.jsp" context="/day20">
            <c:param name="asd" value="asd"></c:param>
        </c:url>
    </body>

    <c:redirect>标签

    作用:<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param

    <body>
        <%-- 重定向到http://www.baidu.com --%>
        <c:redirect url="http://www.baidu.com" />
    </body>

    运行结果:

      页面一运行,就会直接重定向到百度http://www.baidu.com

    EL表达式的最主要功能就是从域对象中获取数据,并且输出.

    EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。两者结合这样使得整个jsp页面变得更佳简洁。

  • 相关阅读:
    Java:day11
    Java:day10
    Java:day9
    Java:day8
    纯虚函数和抽象类
    C++的虚拟继承
    派生类构造函数、析构函数的定义和调用次序
    c++的继承方式——公有、保护、私有
    操作系统中系统调用的执行过程
    C++的类
  • 原文地址:https://www.cnblogs.com/limingxian537423/p/7061582.html
Copyright © 2020-2023  润新知