EL技术
1 - El工具包介绍
1)由Java技术开发的一个jar包
2)作用降低JSP文件开发时Java命令 开发强度
3)Tomcat服务器本身自带了EL工具包(在Tomcat安装地址/lib/el-api.jar)
JSP文件作用:代替响应对象将Servlet中doGet/doPost的执行结果写入到响应体
2 - EL表达式与作用域对象别名
1.命令格式:${作用域对象别名.共享数据} ${applicationScope.(Integer)application.getAttribute("key")}
2.命令作用:
1)EL表达式是EL工具包提供一种特殊命令格式【表达式命令格式】
2)EL表达式JSP文件上使用
3)负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体
1.JSP文件可以使用的作用域对象
1)全局作用域对象(application) ServletContext application = new ServletContext();
2)会话作用域对象(session) HttpSession session = new HttpSession();
3)请求作用域对象(request) HttpServletRequest request = new HttpServletRequest();
4)当前页作用域对象(pageContext) PageContext pageContext = new PageContext();
这是JSP文件独有的作用域对象,Servlet中不存在。在当前作用域对象存放的共享数据仅能在当前JSP文件中使用,不能共享给其他Servlet或者其他JSP文件
真实开发过程,主要用于JSTL标签与JSP文件之间数据共享
JSTL --数据---> pageContex -----> JSP
2.EL表达式提供作用域对象别名
JSP EL表达式
application ${applicationScope.共享数据名}
session ${sessionScope.共享数据名}
request ${requestScope.共享数据名}
pageContex ${pageScope.共享数据}
3 - 用EL表达式将引用对象属性写入到响应体
1.命令格式:${作用域对象别名.共享数据名.属性名}
例如:
Student student = new Student(100,"alex");
request.setAttribute("key",student);
<body>
学号:${requestScope.key.studentNumber} <!--studentNumber来自于Student类属性,大小完全一致-->
姓名:${requestScope.key.studentName}
</body>
${"A" == requestScope.key.answer?"cheched":""}
2.命令作用:从作用域对象读取指定共享数据关联的引用对象的属性值,并自动将属性的结果写入到响应体
3.属性名:一定要与类中的属性名一致
4.EL表达式没有提供便利集合方法,因此无法从作用域对象读取集合内容输出
4 - EL表达式简化版
1.命令格式:${共享数据名}
2.命令作用:EL表达式允许开发人员开发时省略作用域对象别名
3.工作原理:
EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法,首先到【pageContext】定位共享数据,如果存在直接赌气输出并结束执行,
如果在【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接赌气输出并结束执行,由此类推,在到session,application。如果都没定位成功则返回null
总结:查找顺序(自上而下)pageContext --> request --> session --> application -- > null
4.存在隐患:
1)容易降低程序执行的速度【南辕北辙】
2)容易导致数据定位错误
5.应用场景:
设计目的,就是简化从pageContext读取共享数据并输出难度
6.EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都始于简化版,拒绝使用标准版
5 - EL表达式 -- 支持运算表达式
1.前提:在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体
<!--传统的Java命令-->
<%
String num1 = (String) request.getAttribute("key1");
Integer num2 = (Integer) request.getAttribute("key2");
int sum = Integer.valueOf(num1) + num2;
%>
sum=<%=sum%>
El表达式简化版(支持运算)
sum=${key1+key2}
2.运算表达式
1)数学运算
2)关系运算:> < >= <=等
部分代码示例:
request.setAttribute("age",22);
El表达式输出关系运算:${age > 18?"可以入内":"谢绝入内"}
3)逻辑运算: && || !
6 - EL表达式提供的内置对象
1.命令个数:${param.请求参数名}
2.命令作用:从通过请求对象读取当前请求包中请求参数内容,并将请求参数内容写入到响应体
3.代替命令:index.jsp
发送请求:Http://localhost:8080/myWeb/index.jsp?userName=alex&passWord=123
<%
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
%>
用户名:<%=userName%>
密码:<%=passWord%>
或
用户名:${param.userName}
密码:${param.passWord}
1.命令格式:${paramValues.请求参数名[下标]}
2.命令作用:如果浏览器发送的请求参数时[一个请求参数关联多个值],此时可以通过paramValues读取请求参数下指定位置的 值,并写入到响应体
3.代替命令:http://localhost:8080/myWeb/index.jsp?page1=1&page2=2&page3=3
此时page请求参数在请求包以数组形式存在
page:[1,2,3]
<%
String[] array = request.getParameterValues("page");
%>
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>
或
第一个值:${paramValues.page[0]}
第二个值:${paramValues.page[1]}
第二个值:${paramValues.page[2]}