EL表达式
- 1. 理解表达式语言
- 1.1 EL表达式的语法
- 1.2 EL表达式的功能
- 1.3 EL表达式和JSP表达式的区别
- 2. EL运算符
- 2.1. 算术运算符
- 2.2. 关系运算符
- 2.3. 逻辑运算符
- 2.4. 三元运算符
- 2.5. 特殊运算符
- 2.5 属性与集合元素访问运算符
- 3. 使用EL访问数据
- 3.1 访问作用域变量
- 3.2 访问JavaBeans属性
- 3.3 访问集合元素
- EL隐含变量
表达式语言(Expression Language,EL)
- 是一种可以在JSP页面中使用的数据访问语言
EL可以用来干啥
- 使动态网页的设计、开发和维护更加容易,网页编写人员不必懂得Java编程语言,也可以编写JSP网页。
1. 理解表达式语言
EL并不是一种通用的编程语言,它仅仅是一种数据访问语言。
1.1 EL表达式的语法
在JSP页面中,表达式语言的语法:
${expression}
//例如
<ul>
<li>用户名:${user.username}
<li>密码:${user.password}
</ul>
//在JSP动作中使用EL表达式
<jsp:include page="${expression}" />
1.2 EL表达式的功能
- 提供了一组简单的运算符
- 对作用域变量的方便访问
- 对JavaBeans对象访问的简单表示
- 对集合元素的简单访问
- 对请求参数的简单访问
- 对请求参数、Cookie和其他请求数据的简单访问
1.3 EL表达式和JSP表达式的区别
在EL中不能定义变量,也不能使用脚本中声明的变量,但它可以访问请求参数、作用域变量、JavaBeans以及EL隐含变量等。
- JSP表达式:
<%=expression %>
//此处的expression为合法的Java表达式,它属于脚本语言的代码,在expression中可以使用由脚本声明的变量
//例如
<%! int count = 100; %>
count is <%=count %>
- EL表达式:
${expression}
//这里的expression是符合EL规范的表达式,并不需要包含在标签内。在EL表达式中不能使用脚本声明的变量
<%! int count = 100; %>
count is ${count}//此处会返回空
2. EL运算符
2.1. 算术运算符
+ 例如:${6+6}
- 例如:${4-3}
* 例如:${4*3}
/ 例如:${9/3}
注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${‘a’+‘b’}则会出现异常。
2.2. 关系运算符
> 或者 gt, 例如:${8>9} 或者 ${8 gt 9 }
>= 或者 ge, 例如:${45>=9} 或者 ${45 ge 9 }
< 或者 lt, 例如:${4<9} 或者 ${4 lt 9 }
<= 或者 le, 例如:${9<=8} 或者 ${9 le 8 }
== 或者 eq, 例如:${4==4} 或者 ${4 eq 4 }
!= 或者 ne, 例如:${4!=3} 或者 ${4 ne 3 }
2.3. 逻辑运算符
&& 或者 and, 例如:${false && false} 或者 ${false and false }
|| 或者 or, 例如:${true || false} 或者 ${true or false }
! 或者 not,例如:${!true}(相当于${false}) 或者 ${not true }
2.4. 三元运算符
? : 例如:${3>2?'是':'不是'}
2.5. 特殊运算符
empty 判断EL表达式中的表达式是否为空
例如:${empty sessionScope.user}
2.5 属性与集合元素访问运算符
"." 是我们最常用的,作用相当于执行Bean中的get方法。
例如:
${sessionScope.user.userName}意思是:在会话中得到名称为user的Bean对
象,通过“.”运算符执行getUserName();方法,返回存放在Bean中的用户名属性
的值。
[] 作用和“.”运算符的一样,只不过[]运算符可以执行一些不规则的标识符。
例如:
${requestScope.user["score-math"]},这个表达式中有不规则的标识符,
是不能使用“.”来访问的。
3. 使用EL访问数据
3.1 访问作用域变量
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL中数据的读取</title>
</head>
<body>
<%
String[] arr = {"Java web从入门到精通","Java开发规范手册","Java网络编程"};
request.setAttribute("book",arr); //将数组保存到request对象中
%>
<%
String[] arr1 = (String[])request.getAttribute("book"); //获取保存到request范围内的变量
//通过循环和EL输出一维数组的内容
for(int i = 0;i < arr1.length;i++){
request.setAttribute("requestI", i);
%>
${ requestI }: ${ book[requestI] }<br> <!-- 输出数组中第i个元素 -->
<%
}
%>
</body>
</html>
3.2 访问JavaBeans属性
JavaBeans类:
public class Student {
private boolean flag;
public Student(){}
public boolean getFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
Servlet类:
public class StudentServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Student student = new Student();
student.setFlag(false);
request.setAttribute("student", student);
request.getRequestDispatcher("student.jsp").forward(request, response);
}
}
JSP页面访问
${student.flag}//获取student对象的flag属性,就是这么简单
3.3 访问集合元素
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ page import="java.util.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL获取指定元素</title>
</head>
<body>
<%
List<String> list = new ArrayList<String>(); //声明一个List集合的对象
list.add("饼干");
list.add("牛奶");
list.add("果冻");
session.setAttribute("goodList",list); //将List对象保存到session对象中
List<String> list1 = (List<String>)session.getAttribute("goodList"); //获取保存到session范围内的对象
for(int i=0;i<list1.size();i++){
request.setAttribute("requestI", i); //将循环增量保存到request范围内的对象中
%>
${ requestI }: ${ goodList[requestI] }<br> <!-- 输出集合的第i个元素 -->
<%} %>
</body>
</html>
EL隐含变量
复习一下JSP的隐含变量:
request、response、application、pageContext、session、page、out、config、exception
下面是EL隐含变量:
变量名 | 说明 |
---|---|
pageContext | 包含JSP常规隐含对象的PageContext类型对象 |
param | 包含了请求参数字符串的Map对象 |
paramValues | 包含了请求参数字符串数组的Map对象 |
header | 包含请求头字符串的Map对象 |
headerValues | 包含请求头字符串数组的Map对象 |
initParam | 包含Servlet上下文参数的参数名和参数值的Map对象 |
cookie | 包含Cookie域和单个对象的Map对象 |
pageScope | 包含page作用域属性的Map对象 |
requestScope | 包含request作用域属性的Map对象 |
sessionScope | 包含session作用域属性的Map对象 |
applicationScope | 包含application作用域属性的Map对象 |
例子
${pageContext.request.method} //获得HTTP请求的方法,如GET或POST
${pageContext.request.queryString} //获取请求的查询串
${pageContext.request.requestURL} //获取请求的URL
${pageContext.request.remoteAddr} //获取请求的IP地址
${pageContext.session.id} //获取会话的ID
${pageContext.session.new} //判断会话对象是否是新建的
${pageContext.servletContext.serverInfo}//获取服务器的信息