EL表达式:最初出现的目的是用来取代jsp页面中的jsp脚本表达式(<%= %>).但是随着el的发展el的功能已经不限于此了.
~获取常量
字符串/数字/布尔类型,直接写在el表达式中,el直接进行输出
<h1>获取数据常量</h1>
<hr>
${aaa} ${"fff"} ${123} ${true}
//结果为:fff 123 true //第一个aaa为变量他会去域里面找,找不这就什么东不输出
~获取域中的变量
如果el中写的是一个变量的名,则el会调用pageContext的findAttribute方法,在四大作用域中以给定的名字找对应的属性值,找到后进行输出,如果四个域中都找不到,什么都不输出
<%
String name = "灭绝师太";
session.setAttribute("name", name);
%>
${name }
//结果:灭绝师太
~获取数组中的数据
只能获取不能遍历,要想遍历 得配合JSTL标签
<hr>
<% String names[] = { "小燕子", "紫薇", "尔康", "五阿哥" }; pageContext.setAttribute("names", names); %>
${names[0] }
//结果:小燕子
~获取集合中的数据
<h1>获取集合中的数据</h1>
<hr>
<%
List<String> list = new ArrayList();
list.add("甄嬛");
list.add("甄嬛1");
list.add("甄嬛2");
pageContext.setAttribute("list", list);
%>
${list[1] }
//结果:甄嬛1
~获取Map中的数据
使用中括号的地方都可以使用点号替代,除了中括号中是数字或者中括号中包含特殊字符(-.)的情况除外
在中括号中如果不用双引号引起来则是变量,先找变量的值再拿变量的值使用.如果用双引号则是常量,直接使用常量的值
<%
Map<String, String> map = new HashMap();
map.put("name", "奥巴马");
map.put("age", "52");
map.put("address", "白宫");
pageContext.setAttribute("map", map);
pageContext.setAttribute("name", "age");
%>
<br> ${map["name"] } ${map[name] } ${map["age"] } ${map.address }
//结果:奥巴马 52 52 白宫
~获取javabean的属性
<% //注意导包
Person p = new Person();
p.setName("林志玲");
p.setAge(21);
pageContext.setAttribute("p", p);
%>
<br>${p.name }
//林志玲
在el中 getXXX() 都可以用 .XXX代替
<%= ((HttpServletRequest)pageContext.getRequest()).getContextPath() %>
<br>
在el表达式中get可以省略
<br>
${pageContext.request.contextPath}
<br>
<img alt="" src="${pageContext.request.contextPath}/1.jpg">
//结果:
/Day06
在el表达式中get可以省略
/Day06
【图片的地址为】<img alt="" src="/Day06/1.jpg">
算数运算
+-*/
逻辑运算
比较运算
三元运算符
empty运算符
<body> <h1>empty 运算符 : 判断一个对象是否为null或字符串是否为空字符串或集合内容是否为空或域中是否没有任何属性</h1> <hr> <% String str = "aaaa"; pageContext.setAttribute("str", str); List list = new ArrayList(); list.add(""); list.add("1"); pageContext.setAttribute("list1", list,pageContext.SESSION_SCOPE); String aa = ""; %> ${empty str } ${empty list} <!-- 放到遇中才能够拿的到 --> ${empty list1} <!-- (//若没有上面的两个add 这个就是true) --> ${empty pageScope } ${empty aa } ${empty requestScope } ${empty sessionScope } <h1>三元运算</h1> <hr> ${10>9? "yes" : "no" } <h1>逻辑运算</h1> <hr> && and || or ! not ${not (3>2 and 1<2 or 10>3) } <h1>比较运算</h1> <hr> > gt < lt >= ge <= le != ne ==eq ${1 eq 1 } ${3 ge 2 } ${5+3 lt 3 } <h1>算术运算:如果有非数字参与算数运算,el表达式会试图将非数字转换为数字后参与运算</h1> <hr> ${1+1 } ${1-2 } ${1+"2" } </body>
el中内置了11个内置对象,这些对象el内置的,不需要提前定义就可以直接在el中使用
!pageContext – 有了它可以很方便的获取jsp页面中的9大隐式对象(直接.就可以 如:pageContext.request)
!pageScope – page域中属性组成的Map
String str = "aaaa";
pageContext.setAttribute("str", str);//aaaa
!requestScope – request域中属性组成的Map
!sessionScope – session域中属性组成的Map
!applicationScope –application域中属性组成的Map
!param – 所有请求参数组成的Map< String,String >
paramValues – 所有请求参数组成的Map< String,String[] >
header – 所有请求头组成的Map< String,String>
headerValues – 所有请求头组成的Map< String,String[]>
!cookie – 所有cookie信息组成的Map< String,Cookie>
initParam – 所有web应用的初始化参数组成Map
<%
pageContext.setAttribute("name","fang");
request.setAttribute("name","chao");
%>
${requestScope.name}<br>
${pageContext.request.contextPath }<br>
${param.name } | ${paramValues.like[2] } | ${header["Accept-Language"] }<br>
${cookie.JSESSIONID.name } | ${cookie.JSESSIONID.value }<br>
${initParam.name2 }<br>
当请求地址为:http://localhost:8080/Day06/el/el3.jsp?name=fangchao&like=pingpang&like=lanqiu&like=zuqiu 时
结果:
chao
/Day06
fangchao | zuqiu | zh-CN,zh;q=0.8
JSESSIONID | E444A1AEE5D8565D7FC99E4B8EC9F3DF