EL表达式运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>EL表达式运算</h1>
数值常量:${10}<br/>
字符串常量:${'name'},${null},${""}<br/>
变量:${name}<br/>
四则运算:${3+4},${7-9},${4*3.3},${10/3},${10 div 4.5}(这里小数除法的结果是浮点数,要想化成整数需结合jstl)<br/>
等于:${4==3},${4=="4"},${name=="name"},${"name"=="name"},${4 eq 4}<br/>
不等于:${4!=3},${4 ne 3}<br/>
取余数:${10%3},${10 mod 3}<br/>
小于:${3<4},${3 lt 4}<br/>
大于:${4>3},${4 gt 3}<br/>
小于等于:${3<=4},${3 le 4}<br/>
大于等于:${4>3},${4 ge 3}<br/>
逻辑与:${4>0 && 3<9},${5=='5' and 5==5}<br/>
逻辑或:${4>0||6<0},${true or false}<br/>
逻辑非:${!true},${not true},${!""},${! null}<br/>
<%
int[] a=new int[0];
%>
判空:${empty ""},${empty null},${empty a}<br/>
判非空:${empty not ""},${not empty ""},${! empty null},${empty !""}<br/>
</body>
</html>
运行效果:
EL表达式运算
数值常量:10
字符串常量:name,,
变量:
四则运算:7,-2,13.2,3.3333333333333335,2.2222222222222223(这里小数除法的结果是浮点数,要想化成整数需结合jstl)
等于:false,true,false,true,true
不等于:true,true
取余数:1,1
小于:true,true
大于:true,true
小于等于:true,true
大于等于:true,true
逻辑与:true,true
逻辑或:true,true
逻辑非:false,false,true,true
判空:true,true,true
判非空:false,false,false,false
EL表达式内置对象
在EL表达式中,无需创建就可以使用的称为内置(隐含,隐藏对象)。在EL表达式中一共有11个内置对象,它们都与map相似。
1.param
param是Map<String,String>类型,用来获取参数值,与request.getParameter()方法类似。
<html>
<head>
<title>param内置对象</title>
</head>
<body>
<form>
<input type="text" name="username" />
<input type="text" name="password" >
<input type="submit">
</form>
<%
String name=request.getParameter("username");
String pwd=request.getParameter("password");
%>
request.getParameter获取:<%=name%>
<%=pwd%><br/>
EL表达式获取:${param.username}
${param.password}
</body>
</html>
运行效果:
1.
2.表单输入
3.提交
可看到,当变量为null时,request.getParameter会把null输出,而EL表达式则显示的是空字符串。
EL表达式在获取Map值或者Bean的属性值时,可以用“点”的方法,也可以使用“下标”的方法,如${param.name}和${param['name']}效果相同。但是如果Map的键或者Bean的属性名包含特殊符号如“_”,“-”,那么就必须使用下标,如${param.user_name}。
2.paramValues
paramValues是Map<String,String[]>类型,当一个参数名称对应多个数值时可以使用它。
<html>
<head>
<title>param内置对象</title>
</head>
<body>
<form>
<input type="text" name="interest" />
<input type="text" name="interest" >
<input type="submit">
</form>
${paramValues.interest[0]}
${paramValues.interest[1]}
</body>
</html>
运行结果:
1.填写表单
2.点击提交
3.header
header是Map<String,String>类型,可用来获取请求头。
<html>
<head>
<title>param内置对象</title>
</head>
<body>
${header.host}<br/>
${header.cookie}
</body>
</html>
运行结果:
4.headerValues
headerValues是Map<String,String[]>类型,当一个请求头名称对应多个值时可以使用该对象。
5.initParam
initParam是Map<String,String>类型,用来获取上下文初始化参数,它对应web.xml中的<context-param>中的参数。
<html>
<head>
<title>param内置对象</title>
</head>
<body>
${initParam.name}
</body>
</html>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<context-param>
<param-name>name</param-name>
<param-value>田喜碧</param-value>
</context-param>
</web-app>
运行结果:
6.cookie
cookie是<String,Cookie>类型,其中key是Cookie的名字,值是Cookie对象本身。
<html>
<head>
<title>param内置对象</title>
</head>
<body>
<%
response.addCookie(new Cookie("hebe","12345"));
%>
${cookie.hebe}<br/>
${cookie.hebe.name}<br/>
${cookie.hebe.value}
</body>
</html>
运行结果:
说明:此处需要浏览器先访问一次jsp页面才会把cookie加进去,所以第二次访问才会显示结果。
域内置对象
使用EL表达式最为常见的就是获取域对象中保存的数据。例如${pageScope.xxx}表示获取在pageContext保存的数据,当然${pageScope['xxx']}也可以。
7.pageScope
pageScope是Map<String,String>类型,${pageScope.xxx}的功能相当于pageContext.getAttribute("xxx")。两者的区别在于前者在数据不存在时返回空字符串,后者返回null。
<%@ page import="test.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>param内置对象</title>
</head>
<body>
<%
Person person=new Person("猪头",10);
pageContext.setAttribute("person",person);
%>
${pageScope.person.name}
${pageScope.person.age}
</body>
</html>
package test;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name,int age) {
this.name = name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
Person类中必须要提供setter以及getter方法,否则EL表达式无法访问到person对象的name和age属性。
8.requestScope
requestScope是Map<String,Object>类型,装载了request对象中的所有数据。
9.sessionScope
sessionScope是Map<String,Object>类型,装载了session对象中的所有数据。
10.applicationScope
applicationScope是Map<String,Object>类型,装载了application对象中的所有数据。
假如没有指定域,如${name},那么默认从pageScope开始找名为“name”的对象,然后依次是requestScope,sessionScope,applicationScope,找到即返回该对象。