EL表达式
问题
- 首页中有Servlet和jsp技术的详细教程。Servlet负责请求的处理;jsp负责请求处理结果的展示。
- 以前都是使用Servlet处理完请求,将请求结果数据放在request域中,然后转发到jsp页面,在jsp页面通过<%%>也就是java脚本的方式取出request域中的数据,然后进行展示。
- 也可以将Servlet处理请求后的结果放在session域中,然后将请求重定向到jsp页面,在jsp页面通过<%%>j也就是java脚本的方式取出session域中的数据,然后进行展示。
- 虽然Servlet结合jsp的方式已经极大的简化了开发功能和页面的操作。但在jsp页面中取域中的数据要使用<%%>java脚本和HTML代码进行拼接的方式展示数据,还是比较麻烦,也不利于阅读。
解决
- 在jsp页面中使用EL表达式来获取域对象中的数据,简化在jsp页面中使用<%%>java脚本获取域对象数据的方式
EL表达式的语法
- 语法结构:
${expression}
- 域对象 在 JSP 中有四个:pageContext, request, session, application;
范围依次是: 本页面中,一次请求中, 一次会话中,整个应用程序中。 - 当需要指定 从某个特定的域对象中查找数据时 可以使用四个域对象对应的空间对象
分别是:pageScope, requestScope, sessionScope, applicationScope。 - 使用EL表达式获取域数据时,如果没有指明作用域,会按照作用域由小到大的顺序查找,直到找到为止: pageContext ---> request ---> session ---> application
- 当域对象全找完后 还未找到 则返回空字符串""。
EL表达式的使用
获取数据-基本语法-数据为字符串
设置域对象中的数据
<%
pageContext.setAttribute("uname","gym1"); // page作用域
request.setAttribute("uname","gym2"); // request作用域
session.setAttribute("uname","gym3"); // session作用域
application.setAttribute("uname","gym4"); // application作用域
%>
获取域对象的值
${uname} <!-- 输出结果为:gym1 -->
获取指定域对象的值
${pageScope.uname} <!-- page作用域 -->
${requestScope.uname} <!-- request作用域 -->
${sessionScope.uname} <!-- session作用域 -->
${applicationScope.uname} <!-- application作用域 -->
获取数据-数据为各种对象
获取List
获取List中指定下标的数据:${list[下标] }
获取集合的长度: ${list.size()}
注:list代表的是存在域对象中的变量名(限域变量名)
- 定义一个jsp:
<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
${list[1]}
获取Map
获取Map中指定值:${map["key"] } 或 ${map.key } 注:map代表的是存在域对象中的变量名(限域变量名)
- 定义一个jsp:
<%
Map map = new HashMap();
map.put("aaa", "111");
map.put("bbb", "222");
map.put("ccc", "333");
request.setAttribute("map", map);
%>
${map.aaa }
${map["bbb"]}
获取JavaBean对象
获取对象:${user} 获取对象中的属性:${user.uname}
- 定义一个jsp:
<%
User user = new User();
user.setUserId(1);
user.setUname("zhangsan");
user.setUpwd("123456");
request.setAttribute("user",user);
%>
${user}
${user.uname}
EL中的运算符
算术运算
加法: + 只有运算操作,没有字符串拼接操作
减法: -
乘法: *
除法: / 或 div比较两个值是否相等:== 或 eq(返回true或false)
大于:>
小于:<
大于等于:>=
小于等于:<=empty: 判断域对象是否为空:${empty 限域变量名 }
判断对象是否不为空:${!empty 限域变量名 }
为空,返回true;不为空返回false;
注意:字符串对象、集合对象、普通对象的empty测试