EL表达式主要是代替jsp页面中的表达式脚本,在jsp页面中进行数据的输出,EL表达式在输出数据的时候简洁的多
EL表达式的规则是:${表达式}
EL<body>
<%
request.setAttribute("key","value");
%>
<%-- 如果在域对象中查不到所对应key的数据,jsp会返回null,而EL返回空(什么都不显示) --%>
jsp表达式写法:<%=request.getAttribute("key")%><br/>
EL表达式写法:${key}
</body>
我们发现我们在使用EL表达式是,内容单单写一个key值即可,那么就会思考,四大域对象,如果都有相同的key值,会调用哪一个呢?
我们通过测试以下代码可以发现,最先调用最小的域对象中的值
<body>
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
${key}
</body>
创建一个person类,定义他的一些属性,数组类型、list类型、map类型。
public class Person {
private String name;
private String[] phone;
private List<String> cities;
private Map<String,String> map;
public Integer getAge() {
return 18;
}
//因代码太长看起来不方便,getset,构造器,tostring方法就不写出来了
}
我们创建一个测试类,通过点运算的方式可以调用他的某一属性。name,phone,cities,map都不难理解,而age属性没有在person类中定义,只定义了getAge方法,也可以显示出来。这说明了,EL表达式来person中查找数据时,找的是get方法,而不是他定义的属性
<body>
<%
Person person = new Person();
person.setName("Tom");
person.setPhone(new String[]{"13388886666","13599998888","13666677777"});
List<String> list = new ArrayList<>();
list.add("上海");
list.add("北京");
list.add("浙江");
person.setCities(list);
Map<String,String> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
person.setMap(map);
request.setAttribute("person",person);
%>
输出person对象:${person}<br/>
输出person对象中name属性:${person.name}<br/>
输出person对象中数组的指定属性:${person.phone[0]}<br/>
输出person对象中list某个对象属性:${person.cities[0]}<br/>
输出person对象中map对象属性:${person.map}<br/>
输出person对象中map指定对象属性:${person.map.key1}<br/>
输出未定义的age属性:${person.age}<br/>
</body>
关系运算、逻辑运算、算数运算、三元运算都跟Java中一样,主要介绍一下两种运算方式
empty运算 例如:${empty 对象}
empty运算可以判断一个数值是否为空,为空的时候返回true,否则返回false
以下几种情况为空
值为null的时候
值为空字符串的时候
值是Object类型数组,且长度为0时
list集合中,元素个数为0时
map集合中,元素个数为0时
点运算 例如:&{map.key1}
点运算,可以输出Bean对象中的某个属性的值
中括号运算
可以输出有序集合中某个元素的值(使用方法相当于下标)
可以输出map集合中key里含有特殊字符的值 例如:${map[‘a.a.a’]}
EL表达式中11个隐含对象
pageContext:可以获取jsp中的9大内置对象
pageScope:可以获取pageContext域中的数据
requestScope:可以获取request域中的数据
sessionScope:可以获取Session域中的数据
applicationScope:可以获取ServletContext域中的数据
param:可以获取请求参数的值
paramValues:可以获取请求参数的值,当一个key有多个value时使用
header:可以获取请求头的值
hesderValues:获取请求头的值,当一个key有多个value时使用
cookie:可以获取当前请求的cookie信息
initParam:可以获取web.xml中配置的上下文参数
四大域对象的使用方法
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
pageContext:${pageScope.key}<br/>
request:${requestScope.key}<br/>
session:${sessionScope.key}<br/>
application:${applicationScope.key}<br/>
pageContext对象的常用方法
<body>
协议:${pageContext.request.scheme}<br>
服务器 ip:${pageContext.request.serverName}<br>
服务器端口:${pageContext.request.serverPort}<br>
获取工程路径:${pageContext.request.contextPath}<br>
获取请求方法:${pageContext.request.method}<br>
获取客户端 ip 地址:${pageContext.request.remoteHost}<br>
获取会话的 id 编号:${pageContext.session.id}<br>
</body>
以上就是关于“告诉你EL表达式如何使用”的介绍,大家如果想了解更多相关知识,可以关注一下极悦的Java极悦在线学习,里面的课程内容细致全面,从入门到精通,适合零基础的小伙伴学习,希望对大家能够有所帮助。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习