• 【JavaWeb】JSP系列——EL表达式


    EL表达式

    01 关于EL表达式

    • Expression Language(表达式语言)
    • EL表达式可以代替JSP中的java代码,让JSP文件中的程序看起来更加整洁,美观。
    • JSP中夹杂着各种java代码,例如<% java代码 %>、<%=%>等,导致JSP文件很混乱,不好看,不好维护。所以才有了后期的EL表达式。
    • EL表达式可以算是JSP语法的一部分。EL表达式归属于JSP。

    02 EL表达式在JSP中的作用:

    从某个作用域中取数据,然后将其转换成字符串,然后将其输出到浏览器。这就是EL表达式的功效。

    • 第一功效:从某个域中取数据。

      ​ 四个域:

      • pageContext
      • request
      • session
      • application
    • 第二功效:将取出的数据转成字符串。

      ​ 如果是一个java对象,也会自动调用java对象的toString方法将其转换成字符串。

    • 第三功效:将字符串输出到浏览器。

      ​ 和这个一样:<%= %>,将其输出到浏览器。

    03 EL表达式的使用

    3.1 EL表达式基本的语法格式及简单使用

    语法格式:${表达式}

    将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。数据是必须存储到四大范围之一的。

    <%
    	// 创建User对象
    	User user = new User();
    	user.setUsername("jackson");
    	user.setPassword("1234");
    	user.setAge(50);
    	request.setAttribute("userObj", user)
    %>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    使用EL表达式取

    ${这个位置写什么????这里写的一定是存储到域对象当中时的name}
    要这样写:${userObj}
    等同于java代码:<%=request.getAttribute("userObj")%>
    你不要这样写:${"userObj"}
    
    • 1
    • 2
    • 3
    • 4

    3.2 ${abc} 和 ${“abc”}的区别是什么?

    ​ ${abc}表示从某个域中取出数据,并且被取的这个数据的name是"abc",之前一定有这样的代码: 域.setAttribute(“abc”, 对象);
    ​ ${“abc”} 表示直接将"abc"当做普通字符串输出到浏览器。不会从某个域中取数据了。

    3.3 ${userObj} 底层是怎么做的?

    从域中取数据,取出user对象,然后调用user对象的toString方法,(没有get方法无法拿到,可以不使用驼峰原则)转换成字符串,输出到浏览器。

    3.4 如何输出对象的属性值?

    ${userObj.username} 使用这个语法的前提是:User对象有getUsername()方法。
    ${userObj.password} 使用这个语法的前提是:User对象有getPassword()方法。
    ${userObj.age} 使用这个语法的前提是:User对象有getAge()方法。
    ${userObj.email} 使用这个语法的前提是:User对象有getEmail()方法。
    EL表达式中的. 这个语法,实际上调用了底层的getXxx()方法。
    注意:如果没有对应的get方法,则出现异常。报500错误。

    ${userObj.addr222.zipcode}
    以上EL表达式对应的java代码:user.getAddr222().getZipcode()

    3.5 EL表达式优先从小范围中读取数据。

    ​ pageContext < request < session < application

    3.6 EL表达式中有四个隐含的隐式的范围:

    • pageScope 对应的是 pageContext范围。
    • requestScope 对应的是 request范围。
    • sessionScope 对应的是 session范围。
    • applicationScope 对应的是 application范围。

    3.7 EL表达式取数据的时候有两种形式:

    • 第一种:. (大部分使用这种方式)
    • 第二种:[ ] (如果存储到域的时候,这个name中含有特殊字符,可以使用 [ ])
      • request.setAttribute(“abc.def”, “zhangsan”);
      • ${requestScope.abc.def} 这样是无法取值的。
      • 应该这样:${requestScope[“abc.def”]}

    EL表达式对null进行了预处理。如果是null,则向浏览器输出一个空字符串。

    3.8 EL表达式怎么从集合和数组中取数据?

    从Map集合中取数据:${map.key}

    从数组和List集合中取数据:

    • ${数组[0]}
    • ${数组[1]}
    • ${list[0]}

    3.9 page指令中忽略EL表达式的属性

    <%@page contentType="text/html;charset=UTF-8" isELIgnored="true" %>
    isELIgnored="true" 表示忽略EL表达式
    isELIgnored="false" 表示不忽略EL表达式。(这是默认值)
    
    • 1
    • 2
    • 3

    isELIgnored=“true” 这个是全局的控制忽略EL表达式。

    ${username} 使用反斜杠进行局部控制忽略EL表达式。

    3.10 EL表达式中其他的隐式对象:

    由于EL中没有内含request对象,所以通过pageContext.request获取

    pageContext

    • <%=request.contextPath()%>
      
      • 1
    • ${pageContext.request.contextPath}
      //获取应用的根
      
      • 1
      • 2

    param

    • <%=request.getParameter("xxx")%>
      
      • 1
    • ${param.xxx}
      
      • 1

    paramValues

    • <%=request.getParameters("xxx")%>
      
      • 1
    • ${paramValues.xxx[0]}
      ${paramValues.xxx[1]}
      
      • 1
      • 2

    initParam

    • <%=application.getInitParameter("xxx")%>
      //application是jsp的九大内置对象,对应ServiceContext
      
      • 1
      • 2
    • ${initParam.xxx}
      
      • 1

    3.11 EL表达式的运算符

    算术运算符 +、-、*、/、%

    +号不会做字符串拼接,永远做的是加法运算,${10+“20”}=30("20"转换成数字20)
    ${10+“abc”}(转不成数字报500错误)

    关系运算符 == eq != > >= < <=

    ==、eq、!= 都会调用equals方法,字符串比较与字符串常量池无关,只是重写了equals方法
    " a b c " = = " a b c " , 不 能 写 成 {"abc"=="abc"},不能写成 "abc"=="abc"{“abc”}=${“abc”}

    逻辑运算符 ! && || not and or

    有运算级,!记得加括号

    条件运算符 ? :

    取值运算符 [ ] 和 .

    empty运算符

    • empty运算符的结果是boolean类型
    • ${empty param.username}
    • ${not empty param.username}
    • ${!empty param.password}
  • 相关阅读:
    竞赛选题 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别
    2024年区块链链游即将迎来大爆发
    HTTP介绍、原理
    阿桂天山的技术小结:Flask实现对Ztree树状节点的增改删操作
    知识库搭建最简单的方法:登录、创建、优化,就这三步!
    传奇服务端MirServer文件有何作用
    【应用示范】望友科技携手上海辰竹,加速智能制造与数字化升级
    Spring6 (1) IOC
    Linux内存管理(二十二):slub 分配器之kmem_cache_alloc
    常见Rabbitmq面试题及答案总结
  • 原文地址:https://blog.csdn.net/m0_61163395/article/details/125584348