每日记录(EL(表达式语言))
1 EL概述
1.1 EL的作用
JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。
JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。
1.2 EL的格式
格式:${…}
例如:${1 + 2}
1.3 关闭EL
如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。
1.4 EL运算符
运算符 |
说明 |
范例 |
结果 |
+ |
加 |
${17+5} |
22 |
- |
减 |
${17-5} |
12 |
* |
乘 |
${17*5} |
85 |
/或div |
除 |
${17/5}或${17 div 5} |
3 |
%或mod |
取余 |
${17%5}或${17 mod 5} |
2 |
==或eq |
等于 |
${5==5}或${5 eq 5} |
true |
!=或ne |
不等于 |
${5!=5}或${5 ne 5} |
false |
<或lt |
小于 |
${3<5}或${3 lt 5} |
true |
>或gt |
大于 |
${3>5}或${3 gt 5} |
false |
<=或le |
小于等于 |
${3<=5}或${3 le 5} |
true |
>=或ge |
大于等于 |
${3>=5}或${3 ge 5} |
false |
&&或and |
并且 |
${true&&false}或${true and false} |
false |
!或not |
非 |
${!true}或${not true} |
false |
||或or |
或者 |
${true||false}或${true or false} |
true |
empty |
是否为空 |
${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”} |
true |
1.5 EL不显示null
当EL表达式的值为null时,会在页面上显示空白,即什么都不显示。
2 EL表达式格式
先来了解一下EL表达式的格式!现在还不能演示它,因为需要学习了EL11个内置对象后才方便显示它。
l 操作List和数组:${list[0]}、${arr[0]};
l 操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;
l 操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。
3 EL内置对象
EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
l pageScope
l requestScope
l sessionScope
l applicationScope
l param;
l paramValues;
l header;
l headerValues;
l initParam;
l cookie;
l pageContext;
3.1 域相关内置对象(重点)
域内置对象一共有四个:
l pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”);
l requestScope:${requestScope.name}等同与request.getAttribute(“name”);
l sessionScoep: ${sessionScope.name}等同与session.getAttribute(“name”);
l applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);
如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。
Person.java
public class Person { private String name; private int age; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } |
全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。
3.2 请求参数相关内置对象
param和paramValues这两个内置对象是用来获取请求参数的。
l param:Map<String,String>类型,param对象可以用来获取参数,与request.getParameter()方法相同。
注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。
l paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。
3.3 请求头相关内置对象
header和headerValues是与请求头相关的内置对象:
l header: Map<String,String>类型,用来获取请求头。
l headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。
3.4 应用初始化参数相关内置对象
l initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数。
3.5 Cookie相关内置对象
l cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。
3.6 pageContext对象
pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest(),可以${pageContext.request}。也就是读取JavaBean属性!!!
EL表达式 |
说明 |
${pageContext.request.queryString} |
pageContext.getRequest().getQueryString(); |
${pageContext.request.requestURL} |
pageContext.getRequest().getRequestURL(); |
${pageContext.request.contextPath} |
pageContext.getRequest().getContextPath(); |
${pageContext.request.method} |
pageContext.getRequest().getMethod(); |
${pageContext.request.protocol} |
pageContext.getRequest().getProtocol(); |
${pageContext.request.remoteUser} |
pageContext.getRequest().getRemoteUser(); |
${pageContext.request.remoteAddr} |
pageContext.getRequest().getRemoteAddr(); |
${pageContext.session.new} |
pageContext.getSession().isNew(); |
${pageContext.session.id} |
pageContext.getSession().getId(); |
${pageContext.servletContext.serverInfo} |
pageContext.getServletContext().getServerInfo(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用