Java web笔记 (11) -- EL表达式详解

为什么要学习EL表达式和JSTL表达式??
答:前面我们了解了mvc的 开发模式,其中有一点,前端页面要和后端的java 分离。jsp作为一个VIEW,尽量只做展示数据的工作。但是有时候我们需要在jsp中写少量的java代码,这时我们就可以用EL表达式和JSTL表达式替换掉少量的JAVA代码

EL表达式

一. 概念:Expression Language 表达式语言

二. 作用:替换和简化jsp页面中java代码的编写

三. 语法:${表达式}

四. 注意:

  • jsp默认支持el表达式的。如果要忽略el表达式
    1. 设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
    2. \${表达式} :忽略当前这个el表达式

五. 使用:

1. 运算:

  • 运算符:
    1. 算数运算符: + - * /(div) %(mod)
    2. 比较运算符: > < >= <= == !=
    3. 逻辑运算符: &&(and) ||(or) !(not)
    4. 空运算符: empty
		 emptyd 的使用
		* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
        * ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
        * ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度不为0


2. 获取值

(1). el表达式只能从域对象中获取值
(2). 语法:
			1. ${域名称.键名}:从指定域中获取指定键的值
				* 域名称:
					1. pageScope		--> pageContext
					2. requestScope 	--> request
					3. sessionScope 	--> session
					4. applicationScope --> application(ServletContext)
				* 举例:在request域中存储了name=张三
				* 获取:${requestScope.name}

			2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

在这里插入图片描述
直接找name1,我们会找到request,也就印证了 ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
在这里插入图片描述

3. 获取对象

el表达式 是通过 对象的属性来获取值的。什么是对象的属性呢?
做一个简单的解释:属性就是 setter或者getter方法 ,去掉set 和 get,剩余的部分首字母变为小写(getName -> Name -> name ,name就是对象的属性)

此时有一个疑惑? 成员变量 难道不等同于属性吗?答案在下文中

(1)做一个实例

先创建一个People对象类

public class People {
    
    private String name;
    private int age;
    private Date bir;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Date getBir() {
        return bir;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setBir(Date bir) {
        this.bir = bir;
    }
}

然后再jsp页面中获取

<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    People p1 = new People();
    p1.setName("张三");
    p1.setAge(23);
    p1.setBir(new Date());
    request.setAttribute("p1",p1);
%>
<%--直接打印是地址值--%>
${requestScope.p1} <br>
<%--通过属性获取值--%>
${requestScope.p1.name}<br>
${p1.age}<br>
${p1.bir}<br>

</body>
</html>

打印结果:
在这里插入图片描述



提出一个问题,如果我只想获得生日的月份要怎么操作?? 解答思路:是否记得Date中有个getmouth方法?那mouth也是 Date对象的一个属性啦

在这里插入图片描述
在这里插入图片描述
外国人的月份是从0开始的,他们的6月,相当于我们的七月。



再提出一个问题,我想把日期格式化输出成中文模式,思路是什么?? 解答思路:我们了解了属性的机制,如果我们可以把格式化DATE变成people对象的一个属性,就可以完成。我们只要把方法变为属性。在people类中创建getChinadate 的格式化日期方法,那么chinadate就会变成people类的一个属性

在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述
所以成员变量是属性,但是属性不等同于成员变量



4. 获取list,map集合中的对象

(1) List集合:${域名称.键名[索引]}

我们分别创建两个list,一个是引用类型的list,一个是字符串类型的
在这里插入图片描述
分别获取
在这里插入图片描述
结果
在这里插入图片描述

(2)Map集合:
  • ${域名称.键名.key名称}
  • ${域名称.键名[“key名称”]}
    实例如下
    在这里插入图片描述
    红色圈圈里面是获取map里面的list中的属性
    打印结果如下:
    在这里插入图片描述

5. 隐式对象:

  • el表达式中有11个隐式对象
  • pageContext:
    * 获取jsp其他八个内置对象
    * ${pageContext.request.contextPath}:动态获取虚拟目录
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43507104/article/details/107402784