dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 841|回复: 0

[其他] Web基础了解版07-EL表达式-运算符-11个隐式对象

[复制链接]
  • TA的每日心情

    2024-2-20 11:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    878

    主题

    4343

    帖子

    3995

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    3995

    发表于 2020-4-3 10:00:00 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    EL
    • EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
    • EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。
    • EL表达式出现的目的是为了使JSP写起来更加简单,让jsp的代码更佳简化。
    • EL表达式仅仅用来读取数据,而不能对数据进行修改。
    • 使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。

    EL表达式,它能够极大的简化JSP页面上数据的显示。他就是被用来优化数据读取操作的。
    EL表达式的最主要功能就是从域对象中获取数据,并且输出
    基本语法
    EL表达式总是放在{}中,而且前边有一个$作为前缀
    ${标识符}
    • 第一点:当EL表达式输出的key不存在的时候,输出的是空串””
    • 第二点:EL表达式在域对象中搜索属性的顺序是pageContext,request,session,application
    • 获取域中的对象可以直接使用对象名,这时按照从小到大的顺序依次向上查找。如获取域中名字为user的对象
      • ${user}

    • 获取对象的属性值可以直接通过“对象.属性名”
      • ${user.name}


    • 注意:这里的属性名是get和set方法对应的属性值,并不是对象中的变量名。
      • 比如:如果获取name属性值,那么该对象中必定要存在一个getName()方法。

    • 获取对象的属性也可以通过“对象[“属性名”]”
      • ${user[“name”]}


    • 获取Map中属性时可以直接通过属性的key
      • ${map.key}
      • ${map[key]}

    • 在指定域中获取属性
      • 在EL表达式中如果我们直接使用属性名如:${user},它将会在四个域中由小到大依次查找。顺序:pageScope、requestScope、sessionScope、applicationScope。
      • 也可以指定从哪个域中获取:
        • ${ pageScope .user}:当前页面
        • ${requestScope.user}:当前请求
        • ${sessionScope.user}:当前会话
        • ${applicationScope.user}:当前应用



    运算符语法:${ 运算表达式 }


    算数运算符说 明范 例结果
    +加法${ 12 + 18 }30
    -减法${ 18 - 8 }10
    *乘法${ 12 * 12 }144
    / 或div除法${ 144 / 12 } 或 ${ 144 div 12 }12
    % 或mod取模${ 144 % 10 } 或 ${ 144 mod 10 }4
    关系运算符说 明范 例结果
    == 或 eq等于${ 5 == 5 } 或 ${ 5 eq 5 }true
    != 或 ne不等于${ 5 !=5 } 或 ${ 5 ne 5 }false
    < 或 lt小于${ 3 < 5 } 或 ${ 3 lt 5 }true
    > 或 gt大于${ 2 > 10 } 或 ${ 2 gt 10 }false
    <= 或 le小于等于${ 5 <= 12 } 或 ${ 5 le 12 }true
    >= 或 ge大于等于${ 3 >= 5 } 或 ${ 3 ge 5 }false

    逻辑运算符说 明范 例结果
    && 或 and与运算${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 }false
    || 或 or或运算${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 }true
    ! 或 not取反运算${ !true } 或 ${not true }false
    empty运算符
    empty运算是判断一个对象或者集合是否为空。返回boolean值。
    • 对象为null时,返回true
    • 如果是空的字符串,返回true
    • 如果是空的Object数组(Object数组.length == 0),返回true
    • 空的集合,返回true
    • 空的map,返回true

    三元运算符${ 表达式1 ? 表达式2 : 表达式3 }
    “.”和[]运算符
    • “.” 运算符,可以取JavaBean对象的属性值,也可以取map中某个key的值。
    • [] 中括号,可以获取顺序集合中指定索引的元素,也可以获取特殊key的值。
    • 当我们在map对象中存放一些特殊的key的时候,比如说,key字符串中含有 “.” 、“+” 、“-” 、“*” 、“/” 、 “%” 等 这些运算符的时候,会让el解析器产生歧义的时候。我们可以使用[‘key’]中括号加引号包含key的形式取值。
    • []中括号,可以获取有序集合(数组和List集合)中的给定索引的元素

    11个隐含对象
    这些对象可以在EL表达式中直接使用

    隐含对象类型说明
    pageContextjavax.servlet.jsp.PageContext就是JSP页面中的pageContext对象
    pageScopejava.util.Map<String,Object>Page范围属性名和属性值
    requestScopejava.util.Map<String,Object>Request范围属性名和属性值
    sessionScopejava.util.Map<String,Object>Session范围属性名和属性值
    applicationScopejava.util.Map<String,Object>Web应用范围属性名和属性值
    paramjava.util.Map<String,String>对应一个请求参数
    paramValuesjava.util.Map<String,String[]>对应一组请求参数
    headerjava.util.Map<String,String>请求头
    headerValuesjava.util.Map<String,String[]>请求头返回字符数组
    cookiejava.util.Map<String, Cookie>获取某个cookie对象
    initParamjava.util.Map<String, String>获取web.xml中<context-param>初始化参数
    • 请求域
      • 请求域主要用于获取域对象中的属性,四个对象分别对应四个请求域。
        • pageScope
        • requestScope
        • sessionScope
        • applicationScope


    • 请求参数
      • 参数对象主要用于获取get或post请求中的参数。
        • param:获取指定的请求参数, 如:${param.username},与jsp中request.getParameter()作用一致。
        • paramValues:获取请求参数数组,如:${paramValues.hobby}会返回一个string类型的数组



    获取域数据的顺序
    在执行时,会用标识符为关键字分别从page、request、session、application四个域中查找对应key的对象。找到则返回相应数据。找不到则返回空串。(注意,不是null,而是空字符串)
    获取javaBean普通属性、数组属性、List集合属性,map属性中的数据


    [AppleScript] 纯文本查看 复制代码
    ${  user.username  }          // 获取user对象中。username属性值 
    
    ${  list[下标]  }               // 访问有序集合(或数组)中给定索引的元素
    
    ${  map.key  }                 // 访问map集合中指定key的属性值
    
    ${  map[“key”] }               // 访问特殊字符串的key的属性值

    一定要记住一点,EL表达式获取数据的时候,是通过对应的get方法获取的 BeanUtils 是通过set方法设置值
    pageContext访问Jsp中内置对象
    • 通过pageContext对象我们可以直接获取jsp中的一些内置对象,比如:request对象,session对象,Servletconfig对象,ServletContext对象,然后获取一些我们需要的信息。
    • 常用的功能获取
      • 协议
      • 服务器ip
      • 服务器端口
      • 获取工程路径
      • 获取请求方法
      • 获取客户端ip地址
      • 获取会话的id编号


    • 工程名(上下文路径):${ pageContext.request.contextPath }
    • 但是在实际项目中为了缩短代码量,会把request对象放在pageContext域对象中。然后再使用。比如





    [AppleScript] 纯文本查看 复制代码
    <% 
    // 先把request对象放到pageContext域对象中
    pageContext.setAttribute(“req”,request);
    %>
    //然后EL表达式代码改为
    工程名(上下文路径):${ req.contextPath }

    其他隐含对象



    [AppleScript] 纯文本查看 复制代码
    <body>
    参数username的值:${ param.username }<br/>
    参数hobby的值:${ paramValues.hobby[0] }<br/>
    请求头Accept-Language的值:${ header["Accept-Language"] }<br/>
    请求头Accept的值:${ headerValues["Accept"][0] }<br/>
    cookie的key = ${ cookie.JSESSIONID.name } : value = ${ cookie.JSESSIONID.value } <br/>
    上下文参数:${ initParam.username }<br/>
    </body>










    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2025-2-2 04:54 , Processed in 0.115028 second(s), 30 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表