- ```jsp
<%
// 创建User对象
User user = new User();
user.setUsername("jackson");
user.setPassword("1234");
user.setAge(50);
// 将User对象存储到某个域当中。一定要存,因为EL表达式只能从某个范围中取数据。
// 数据是必须存储到四大范围之一的。
request.setAttribute("userObj", user);
%>
<%--使用EL表达式取值--%>
${这个位置写什么????这里写的一定是存储到域对象当中时的name}
要这样写:
${userObj}
等同于java代码:<%=request.getAttribute("userObj")%>
你不要这样写:${"userObj"}
面试题:
${abc} 和 ${"abc"}的区别是什么?
${abc}表示从某个域中取出数据,并且被取的这个数据的name是"abc",之前一定有这样的代码: 域.setAttribute("abc", 对象);
${"abc"} 表示直接将"abc"当做普通字符串输出到浏览器。不会从某个域中取数据了。
${userObj} 底层是怎么做的?从域中取数据,取出user对象,然后调用user对象的toString方法,转换成字符串,输出到浏览器。
<%--如果想输出对象的属性值,怎么办?--%>
${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()
```
- EL表达式优先从小范围中读取数据。
- pageContext < request < session < application
- EL表达式中有四个隐含的隐式的范围:
- pageScope 对应的是 pageContext范围。
- requestScope 对应的是 request范围。
- sessionScope 对应的是 session范围。
- applicationScope 对应的是 application范围。
- EL表达式对null进行了预处理。如果是null,则向浏览器输出一个空字符串。
- EL表达式取数据的时候有两种形式:
- 第一种:. (大部分使用这种方式)
- 第二种:[ ] (如果存储到域的时候,这个name中含有特殊字符,可以使用 [ ])
- request.setAttribute("abc.def", "zhangsan");
- ${requestScope.abc.def} 这样是无法取值的。
- 应该这样:${requestScope["abc.def"]}
- 掌握使用EL表达式,怎么从Map集合中取数据:
- ${map.key}
- 掌握使用EL表达式,怎么从数组和List集合中取数据:
- ${数组[0]}
- ${数组[1]}
- ${list[0]}
- page指令当中,有一个属性,可以忽略EL表达式
- ```
<%@page contentType="text/html;charset=UTF-8" isELIgnored="true" %>
isELIgnored="true" 表示忽略EL表达式
isELIgnored="false" 表示不忽略EL表达式。(这是默认值
isELIgnored="true" 这个是全局的控制。
可以使用反斜杠进行局部控制:\${username} 这样也可以忽略EL表达式。
```
通过EL表达式获取应用的根:
在EL表达式中没有request这个隐式对象,requestScope这个只代表“请求范围”。不等同于request对象。在EL表达式中有一个隐式对象:pageContext
在EL表达式中的pageContext和JSP中的九大内置对象pageContext是同一个对象
因此能通过pageContext.getRequest()来获取quest
<%=((HttpServletRequest)pageContext.getgetRequest()).getContextPath()%>
上面的这段java代码等同于下面对应的EL表达式
- ${pageContext.request.contextPath}
- EL表达式中其他的隐式对象:
- pageContext
- param
- paramValues
- initParam
- EL表达式的运算符
- 算术运算符
- +、-、*、/、%
<%--在EL表达式中,"+"运算符只能做求和运算,不会进行字符串的拼接操作--%>
- 关系运算符
- [ ] == eq != > >= < <=
<%--在EL表达式当中的"=="和"eq"都调用了equals方法--%>
- 逻辑运算符
- [ ] ! && || not and or(!和not都是取反)
- 条件运算符
- [ ] ? :
- 取值运算符
- [ ]和.
- empty运算符
<%--判断是否为空,如果为空,结果为true。如果不为空,结果是false--%>
- [ ] empty运算符的结果是boolean类型
- [ ] ${empty param.username}
- [ ] ${not empty param.username}
- [ ] ${!empty param.password}