EL表达式
- 命令格式:${作用域对象别名.共享数据}
<!--传统写法:-->
<%
Student stu = (Student)request.getAttribute("key");
%>
学院编号:<%=stu.getSid()%>
<!--用EL表达式之后 -->
学院编号:${requestScope.key.sid}
-
命令作用:
- EL 表达式是 EL 工具包提供的一种特殊的命令格式
- EL 表达式在 JSP 文件上使用
- 负责在 JSP 文件上从作用域对象读取指定的共享数据并输出到响应体
-
作用域对象别名
- JSP文件可以使用的作用域对象
作用域对象 | 作用域对象的别名 | 俗称 | EL表达式提供的作用域别名 |
---|---|---|---|
ServletContext | application | 全局作用域对象 | ${applicationScope.共享数据名} |
HttpSession | session | 会话作用域对象 | ${sessionScope.共享数据名} |
HttpServletRequest | request | 请求作用域对象 | ${requestScope.共享数据名} |
PageContext | pageContext | 当前页作用域对象 | ${pageScope.共享数据名} |
注:其中当前页作用域对象,是JSP文件独有的作用域对象Servlet中不存在,在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或则其他JSP文件,主要用于JSTL标签与JSP文件之间数据共享数据
EL 表达式简化版
-
命令格式 :${共享数据名}
-
命令作用: EL表达式允许开发人员开发时省略作用域对象别名
-
工作原理:
EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】的算法。
首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行,如果【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接读取输出并结束执行,如果在【request】没有定位成功,到【session】定位共享数据,如果存在直接读取输出并结束执行,如果在【session】没有定位成功,到【application】定位共享数据,如果存在直接读取输出并结束执行,如【application】没有定位成功,返回null**pageContext--->request--->session--->application**
EL 表达式-支持运算表达式
-
数学运算
-
关系运算: > >= == < <= != 对应的 gt ge eq lt le !=
-
逻辑运算: && || !
<%
String num1 = (String)request.getAttribute("key1");
Integer num2 = (Integer)request.getAttribute("key2");
int sum = Integer.valueOf(num1) + num2 ;
%>
计算结果是 : <%=sum%>
<hr>
EL 表达式计算结果 : ${key1 + key2}
<!--传统java命令方式实现关系运算输出-->
<%
String age = (String)request.getAttribute("age");
if(Integer.valueOf(age) >= 18){
%>
欢迎欢迎
<%
}else {
%>
谢绝入内
<%
}
%>
<hr>
EL 表达式做 : ${age>=18 ? "欢迎欢迎" : "谢绝入内"}
EL 表达式提供内置对象
-
命令格式: ${param.请求参数名}
-
命令作用: 通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体
e.g:
<!--
地址栏输入: http://localhost:8888/myWeb/index_1.jsp?userName=mike&password=123
-->
传统方法:
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
%>
用户名 : <%=userName%><br>
密码 : <%=password%>
<hr>
EL表达式内置对象 param 输出
用户名:${param.userName}<br>
密码 : ${param.password}
<!--
http://localhost:8888/myWeb/index_2.jsp?pageNo=1&pageNo=2&pageNo=3
(浏览器里边携带了多少个请求参数呢? 不是3个 是1个 叫做pageNo 而这个pageNo关联了3个值)
此时 pageNo 请求参数在请求包以数组的形式存在
pageNo : [1,2,3]
-->
<%
String arr[] = request.getParameterValues("pageNo");
%>
第一个值<%=arr[0]%><br>
第一个值<%=arr[1]%><br>
第一个值<%=arr[2]%>