1.EI工具包介绍
- 由Java技术开发一个jar包;
- 作用:降低JSP文件开发时Java命令开发强度;
- Tomcat服务器本身自带了EI工具包(Tomcat安装地址/lib/el-api.jar)
2.EL表达式
1.命令格式
-
${作用域对象别名.共享数据}
2.命令作用
- 1.EI表达式是EI工具包提供的一种特殊命令格式【表达式命令格式】;
- 2.EI表达式在【JSP】文件上使用;
- 3.负责在JSP文件上从【作用域对象】读取指定的【共享数据】并输出到【响应体】。
3.EI表达式作用域对象别名
1.JSP文件可以使用的作用域对象
- 1.ServletContext application:全局作用域对象
- 2.HttpSession session:会话作用域对象
- 3.HttpServletRequest request:请求作用域对象
- 4.PageContext pageContext 当前页作用域对象
这是【JSP文件独有的作用域对象】,Servlet中不存在,在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或者其他JSP文件。【真实开发过程中】,主要用于【JSTL标签】与【JSP文件】之间共享数据。 - JSTL---->pageContext----->JSP
2.EI表达式【提供】作用域对象别名
JSP | EI表达式 |
---|---|
application | ${applicationScope.共享数据名} |
session | ${sessionScope.共享数据名} |
request | ${requestScope.共享数据名} |
pageContext | ${pageScope.共享数据名} |
3.EI表达式将引用对象属性【写入】到响应体
1.命令格式
${作用域对象别名.共享数据名.属性名}
2.命令作用
从【作用域对象】读取【指定共享数据】关联的应用对象属性值,并自动将属性的结果写入到响应体。
3.属性名
一定要去引用类型属性名,完全一致(大小写)
4.EI表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出。
4.EI表达式简化版
1.命令格式
-
${共享数据名}
2.命令作用
EI表达式允许开发人员开发时省略作用域对象别名
3.工作原理
EI表达式简化版由于没有指定作用域对象,所以执行时采用【猜算法】
- 1.首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行;
- 2.如果1未成功,到【request】定位共享数据,如果存在直接读取输出并结束执行;
- 3.如果2未成功,到【session】定位共享数据,如果存在直接读取输出并结束执行;
- 4.如果3未成功,到【application】定位共享数据,如果存在直接读取输出并结束执行;
- 5.如果4未成功,返回null。
- pageContext------>request--------->session--------->application
4.存在隐患
- 容易降低程序执行速度
- 容易导致数据定位错误
5.应用场景
设计目的:简化从pageContext读取共享数据并输出的难度。
6.即使存在隐患,实际开发时仍然用简化版
拒绝使用标准版!!!(手动狗头)
5.EI表达式----支持运算表达式
1.前提
在JSP文件有时需要将读取的共享数据进行一番【运算之后】,将运算结果写入到响应体。
2.运算表达式
- 1.数学运算
- 2.关系运算
==(eq) 、 >(gt) 、 >=(ge) 、 <(lt) 、 <=(le) 、 !=
- 3.逻辑运算
&& 、 || 、!
6.EI表达式提供内置对象
1.命令格式
-
${param.请求参数名}
2.命令作用
通过请求对象读取当前请求包请求参数内容,并将请求参数内容写入到响应体。
3.代替命令:index.jsp
发送请求:Http://localhost:8080/myWeb/index.jsp?userName=mike&password=123
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
%>
<%=userName%>
<%=password%>
4.命令格式
-
${paramValues.请求参数名[下标]}
5.命令作用
如果浏览器发送的请求参数是【一个请求参数关联多个值】
此时可以通过paramValues读取请求参数指定位置的值,并写入到响应体。
6.代替命令
-
http://localhost:8080/myWeb/index_2.jsp?pageNo=1&pageNo=2&pageNo=3
此时pageNo请求参数在请求包内以数组形式存在:
-
pageNo:[1,2,3]
-
<% String array[] = request.getParameterValues("pageNo"); %>
-
第1个值:<%=array[0]%>
-
第2个值:<%=array[1]%>
7.EI表达式常见异常
- 在对象中没有找到指定属性
-
javax.ei.PropertyNotFoundException