zoukankan      html  css  js  c++  java
  • EL表达式

    EL表达式学习

      1.什么是EL表达式

        全称:Expression Language.一种写法非常简洁的表达式。语法简单易懂,便于使用。表达式语言的灵感来自于ECMAScript和XPath表达式语言。

      2.EL表达式的作用

        作用:让jsp书写起来更加的方便。简化在jsp中获取作用域或者请求数据的写法。也会搭配Jstl来进行使用。

      3.使用EL表达式

        语法结构:${expression}:提供 . 和 [] 两种运算符来存取数据。

      使用:  

          a)使用EL表达式获取请求数据

    •         获取用户请求数据(请求实体)

                ${param.键名}获取请求实体中一个键一个值的数据

                ${paramValues.键名}获取请求实体中同键不同值的数据,返回的是String数组,可以使用角标直接获取 例如:爱好

    •          获取请求头数据

                ${header}返回所欲的请求数据,键值对形式

                ${header['键名']}返回指定的键的请求头数据

                ${headerValues[‘键名’]}

    •         获取cookie数据

                ${cookie}获取所有cookie对象 键值对

                ${cookie.Cookie对象的键名} 获取了指定cookie数据的cookie对象

                ${cookie.Cookie对象的键名.name}获取存储了指定cookie数据的cookie对象的存储的键

                ${cookie.Cookie对象的域名.value}获取存储了指定cookie数据的cookie对象存储的值

           

          b)使用EL表达式获取作用域数据

            作用域对象:pageContext request session application

            获取作用域数据:我们使用setAttribute方法存储的数据

            获取:

                     普通字符串数据  ${键名}

                对象数据 ${键名.属性名}

                集合数据

                    list集合 ${键名[角标]}

                    Map集合 ${map集合作用域键名。map集合存储的数据的键名}

              作用域查找顺序: 如果找到了则不再查找,如果找不到,则继续查找下一个作用域,如果四个作用域中都没有则什么都不显示。

                      pageContext---->request---->session--->application

              指定作用域取数据:

                      ${pageScope.键名} 指明获取pagecontext作用域中的数据

                      ${requestScope.键名}指明获取request作用域中的数据

                      ${sessionScope.键名}指明获取session作用域中的数据

                      ${applicationScope.键名}指明获取application作用域中的数据

                                                                          ${cookie.user.username}

          c)使用EL表达式运算

            算术运算:+ - * / 在EL表达式中可以直接进行算术运算

            关系运算: && ||  !

                  ${逻辑表达式}

                  注意:没有单&单|

            比较运算:== !=   >, >=, <,<=

                         ${比较表达式}

            三目运算符:

                  ${条件?值:值}

          d)EL表达式空值判断empty

                  ${empty 键名}

                  作用:

                      判断该键是否存储有效数据。

    <%@ page language="java" import="java.util.*,wq.pojo.*" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
    <!-- 将流转数据显示到浏览器中,使用传统的方式 -->
    <%=request.getAttribute("str")%><br>
    <%=((User)request.getAttribute("user")).getFav()%><br>
    <%=((ArrayList)request.getAttribute("list")).get(2)%><br>
    <%=((User)((ArrayList)request.getAttribute("list")).get(3)).getFav()%><br>
    <%=((HashMap)request.getAttribute("hs")).get("b1")%><br>
    <%=((User)((HashMap)request.getAttribute("hs")).get("c1")).getFav()%>
    <hr>
    ${str}<br>
    ${user.fav}<br>
    ${list[2]}<br>
    ${list[3].fav}<br>
    ${hs.b1}<br>
    ${hs.u.fav}<br>
    <hr>
    <h3>获取请求实体数据(请求实体)</h3>
    <%=request.getParameter("uname")%>---${param.uname}<br>
    <%=request.getParameterValues("fav")[1]%>--${paramValues.fav[1]}<br>
    <%=request.getHeader("User-Agent")%>---${header["User-Agent"]}--${headerValues["Accept-Language"][0]}<br>
    <h3>获取cookie数据</h3>
    ${cookie}<br>
    ${cookie.name}<br>
    ${cookie.JSESSINI.name}--${cookie.JSESSIONID.value}
    <h3>EL获取作用域数据时作用域的查找顺序</h3>
    <%
        pageContext.setAttribute("hello", "hello pageContext");
        request.setAttribute("hello","hello rquest");
        session.setAttribute("hello", "hello session");
        application.setAttribute("hello", "hello application");
    %>
      ${requestScope.hello}--${a}
      <h3>EL表达式的逻辑运算</h3>
      
      <%
         request.setAttribute("a", "2");            
           
      %>
              ${1+2}---${2*3}--${a+3}---${1+"5"}
              ${2>3&&4<5}---&{2>3||4<5}--${!(2>3)}
              ${2==2}---${3>2}<br>
             ${2>3?"":""}
          <h3>EL表达式的empty</h3>    
     
     <%
             request.setAttribute("str", "");
             User u=new User();
             request.setAttribute("name", u);
             ArrayList la=new ArrayList();
             request.setAttribute("la", la);
     %>
      ${empty str}<br>
      ${u}<br>
      ${la}<br>
      
    View Code

     JSTL标签库   

    1.什么是jstl标签库

    • jstl是apache对EL表达式的扩展(也就是jstl依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与jsp动作标签一样,只不过他不是jsp内置标签,需要我们自己导包,以及指定标签而已。
    • 如果你使用MyEclipse开发javaWeb,那么在把项目发布到tomcat时,你会发现,myeclipse会在lib目录下存放jstl的jar包!如果你没有使用myeclipse开发那么需要自己来导入这个jstl的jar包:jstl-1.2.jar

    2.JSTL标签库的作用

    • 用来提升在jsp页面的逻辑代码的编码效率,使用标签来代替逻辑代码的直接书写,高效,美观,整洁,易读。

    3.使用JSTL标签库

    a)内容:

    • i.核心标签库(学习)(学习)
    • ii.格式化标签库
    • iii.函数标签库
    • iv.XML标签库
    • v.SQL标签库

    b)使用:

    i.导包

    ii.使用taglib标签引入资源

    iii.核心标签库。

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

    内容:

       out标签:<c:out value="${表达式}"  default="默认值" ></c:out>

    作用:结合EL表达式将数据响应给浏览器。如果EL表达式没有取到数据则可以使用default属性声明默认值。

       set标签:  <c:set value="数据" var="键名" scope="作用域名"></c:set>

    作用:将数据存储到指定的作用域中,默认值pageContext作用域

      remove标签:<c:remove var="要删除数据的键名" scope="作用域名"/>

    作用:删除作用域中的数据,默认是删除四个作用域中符合要求的数据。

              但是可以通过scope属性指明要删除的作用域数据

    注意:

      使用pageContext.removeAttribute("键名"); 此方法将四个作用域中符合的数据都会删除

           使用pageContext.removeAttribute(String name,int scope); 

                     要删除的作用域中的数据scope的值为1.pageContext,2.request,3.session,4.application

           使用request.removeAttribute("键名"); 删除当前作用域中符合要求的数据

           使用session.removeAttribute("键名"); 删除当前作用域中符合要求的数据

          使用application.removeAttribute("键名");删除当前作用域中符合要求的数据

    逻辑标签:

                      单分支判断标签:<c:If test="${表达式}">数据</c:if>

                    作用:可以根据el表达式进行一定程度的单分支逻辑判断。

                 注意:

                           test属性中书写的是EL表达式,或者说是EL表达式。

                            该标签只能进行EL表达式相关的逻辑判断,不能进行EL表达式不能获取的数据的逻辑处理。

     多分支判断标签:

                      <c:hoose>

                                 <c:when test="${表达式}"><c:when>

                                 <c:when  test=" ${表达式}"><c:when>

                                  ..

                                <c:otherwise></c:otherwise>

                   注意:

                              符合条件后执行一个分支,其他分支不会执行。

    循环标签:

                   <c:foreach>

                        循环体

                  </c:foreach>

      属性:

                     begin:声明循环的开始位置

                     end:声明循环的结束位置

                     step:声明循环的步长

                    varStatus:声明变量记录循环状态,例如变量:i

                               注意:记录的数据存储到作用域中可以直接使用EL表达式进行获取

                              实例:${i.index} 获取当次循环的下标

                                         ${i.count} 获取当次循环的次数

                                         ${i.first} 判断是否第一次循环

                                         ${i.last}判断是否是最后一次循环

            items:声明要遍历的数据,可以是集合和数组等

                                     注意:要使用EL表达式来获取

                                    var:声明变量记录每次遍历的结果。可以做循环体中使用EL表达式获取遍历出来的数据。

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
        request.setAttribute("str", "jstl");
    %>
    <%request.setAttribute("str1","jstl学习");%>
    -----------${str1}
    --------------<c:out value="${str2}" default="404"></c:out>
    <hr>
    <!-- set标签学习 -->
    <% 
       request.setAttribute("s1", "set标签学习");
    %>
    <c:set value="set标签学习2" var="s2" scope="request"></c:set>
    <c:set value="hello pageContext" var="hello" scope="page"></c:set>
    <c:set value="hello request" var="hello" scope="request"></c:set>
    <c:set value="hello session" var="hello" scope="session"></c:set>
    <c:set value="hello application" var="hello" scope="application"></c:set>
    ${s1}---${requestScope.s2}---${pageScope.hello}
    <br> ${hello}
    
    <hr>
    <!-- remove标签学习 -->
    <%-- <c:out value="${hello}"></c:out> --%>
    <%
        pageContext.removeAttribute("hello");
        request.removeAttribute("hello");
    %>
    ${pageScope.hello}
    ${hello}
    
    <hr>
    <!-- 单分支判断标签 -->
    <c:set var="a" value="12"></c:set>
    <% 
        int a=Integer.parseInt((String)pageContext.getAttribute("a"));
        if(a>8){
    %>
        <b>今天天气真好,适合学习1</b>
    <% 
        }
     %>
    
    <c:if test="${a>8}">
        <b>今天天气真好,适合学习2</b>
    </c:if>
    <hr>
    <!-- 多分枝逻辑判断 -->
    <c:set var="scope" value="100"></c:set>
    <c:choose>
        <c:when test="${scope>=90}">
            <i>苹果</i>
        </c:when>
        <c:when test="${scope>=70&&score<80}">
           <i>苹果</i>
        </c:when>
        <c:when test="${scope>=80&&scope<70}"></c:when>
        <c:otherwise>
          <i>男女混合双打</i>
        </c:otherwise>
    </c:choose>
    <br>
    <hr>
    <!-- 循环标签 -->
    <c:forEach begin="0" end="5" step="1" varStatus="i">
            <c:if test="${i.count==3}">
                 <u>我是第三次循环</u>
            </c:if>
            111111-${i.index}--${i.count}---${i.first}---${i.last}<br>
    </c:forEach>
    <!-- 循环标签遍历集合 -->
    <%
        //创建测试数据list
         ArrayList<String> list=new ArrayList<String>();
        list.add("苹果");
        list.add("榴莲");
        list.add("荔枝");
        request.setAttribute("list", list);
    
    %>
    <c:forEach items="${list}" var="s" varStatus="i">
        ${s}--${i.index}---${i.count}<br>
    </c:forEach>
    
    <!-- 遍历map集合 -->
    <%
        //声明map集合测试数据
        HashMap<String,String> hs=new HashMap<String,String>();
        hs.put("s1", "唱歌");
        hs.put("s2", "跳舞");
        hs.put("s3", "敲代码");
        //将数据存储到作用域中
        request.setAttribute("hs", hs);
    %>    
        <c:forEach items="${hs}" var="s">
        ${s.key}---${s.value}<br>
        </c:forEach>
    View Code

             

  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/wq-9/p/10744295.html
Copyright © 2011-2022 走看看