1. 简介
(1) JSP表达式 <%= %> 用于向页面中输出一个对象。
(2) 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段。
(3) 使用EL表达式来代替JSP表达式 ,使用JSTL标签来代替JSP脚本片段。
(4) EL表达式用来向页面输出内容
getAttribute();//四个域对象都可以使用//作用不是接收请求参数,在使用getAttribute方法之前必须先使用setAttribute()将属性对方法域对象中;返回Object类型!
getParameter()://仅仅是request使用!用于接收请求参数【url,form表单中】;返回值String类型
2. 基本语法
(1)语法: ${表达式}
用EL表达式获取服务器名称、端口信息、项目名
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 <base href="http://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/"/> 9 </head> 10 <body> 11 ${pageContext.request.serverName} 12 ${pageContext.request.serverPort} 13 ${pageContext.request.contextPath} 14 </body> 15 </html>
(2) EL表达式可以从域中获取属性。
- 使用 ${属性名}
- 如果只填写一个属性名,EL表达式会自动做全域查找。
- 所谓的全域查找,就是按照page request session application四个域范围内分别,找到就返回属性,如果没找到什么都不返还。
- 我们还可以指定去哪个域查找
pageScope
requestScope
sessionScope
applicationScope
- 例子:
查找request中属性
${requestScope.属性名}
查找session中的属性
${sessionScope.属性名}
- 注意:EL表达式只能获取域中的属性
EL表达式不能直接调用对象的方法
- 通过EL表达式读取对象的属性时,只需要${对象.属性名}
EL表达式会自动调用对象的对应的getter方法,通过将属性名首字母大写,然后加上一个get
注意:只要有属性,就可以一直点下去,也就说对象的属性是对象的话,我们也可以通过对象的属性的属性的方式调用!
- 当读取一些名字比较特殊的属性时,这种特殊值必须要指定域,例如属性名带-:
${requestScope['属性名']}
3. 隐含对象
> EL中一共有11个内置对象。
①pageContext
类型: PageContext
它和JSP中pageContext是一样的
作用: 可以获取到JSP中其他的隐含对象
例如:可以获取项目名:
${pageContext.request.contextPath }
②pageScope
类型:Map<String,Object>
代表:page域中的属性
作用:可以获取到page域中的属性
③requestScope
类型:Map<String,Object>
代表:request域中的属性
作用:可以获取到request域中的属性
④sessionScope
类型:Map<String,Object>
代表:session域中的属性
作用:可以获取到session域中的属性
⑤applicatScope
类型:Map<String,Object>
代表:application域中的属性
作用:可以获取到application域中的属性
⑥param
类型: Map<String , String>
代表:用户发送的请求参数
作用:可以获取请求参数
用法: ${param.参数名}
⑦paramValues
类型:Map<String , String[]>
代表:一个请求参数对应的多个值
用法: ${paramValues.参数名[索引]}
⑧header
作用:可以获取到用户发送的请求头
类型:Map<String , String>
例如:获取用户的系统信息 ${header['User-Agent']}
⑨headerValues
类型: Map<String , String[]>
作用:可以获取一个头的多个值
⑩initParam;
类型:Map<String , String>
作用:获取整个WEB应用的初始化参数
⑪cookie
类型:Map<String , Cookie>
作用:用来获取Cookie
4. 运算
> 在EL中可以直接使用运算符进行运算。
> 在EL中可以使用Empty元素符:
如果值为null , empty则返回 true
如果为空串, 则返回 true
空的集合 返回true
> 所以empty元素符经常用来判断集合或者字符串是否为空
代码示例:
1 <%@page import="java.util.List"%> 2 <%@page import="java.util.ArrayList"%> 3 <%@page import="com.neuedu.el.User"%> 4 <%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10 <title>Insert title here</title> 11 </head> 12 <body> 13 ${3*5} 14 ${empty ""} 15 16 <% 17 User user=new User(); 18 request.setAttribute("user", user); 19 %> 20 21 ${empty user} 22 23 <% 24 List<User> list=new ArrayList<User>(); 25 list.add(new User()); 26 request.setAttribute("list", list); 27 28 %> 29 30 ${empty list} 31 </body> 32 </html>
运行结果:
user为实体对象,不为空,所以 ${empty user} 为false
因此${empty list}也为false