EL表达式
1,初识EL
EL表达式提供了获取对象以及属性的简单方式,在很多时候EL表达式可以代替jsp脚本,EL表达式是以${ 开始,以}结束的。
比如我们要取得存在某个作用域中的值,可以这么做:${company},当jsp中嵌入这句话时,会依次从page,request,session,application作用域中
查找名称为company的值,类似于如下脚本:
<%=pageContext.getAttribute("company")%>
<%=request.getAttribute("company")%>
<%=session.getAttribute("company")%>
<%=application.getAttribute("company")%>
四中作用域不仅可以存储简单的数据类型,还可以存储类对象,通过EL直接获取所取对象的属性非常方便。
我们新建一个Student类:
public class Student {
private int toid;
private Stringstuname;
public intgetToid() {
return toid;
}
public voidsetToid(int toid) {
this.toid = toid;
}
public StringgetStuname() {
return stuname;
}
public voidsetStuname(String stuname) {
this.stuname =stuname;
}
}
这是个标准的pojo,拥有标准的getter和setter方法。
然后在jsp页面中,定义一个Student对象,并且放到request作用域里面,然后使用forward跳转到另外一个jsp
<%
Student stu=new Student();
stu.setToid(123);
stu.setStuname("王五");
request.setAttribute("stu1",stu);
request.getRequestDispatcher("eltest1_request.jsp").forward(request,response);
%>
在eltest1_request.jsp中通过EL来获取这个对象的属性:
toid:${stu1.toid}
<br/>
stuname:${stu1.stuname}
2,EL内置对象
EL中也包含一些内置对象,也可以理解为EL内的关键字。
之前我们说过,EL中的属性会根据page,request,session,application这些作用域依次去找,这种方式虽然方便,但是在实际工作中有
几个缺点:当页面非常多的时候,连自己都不知道属性到底放在哪个作用域,这会给以后修改程序逻辑带来隐患;
每次从这些作用域依次去找会耗费一些性能。
所以,我们可以通过pageScope,requestScope,sessionScope,applicationScope这些内置对象来获取具体作用域中的变量属性。
比如上面的eltest1_request.jsp页面,我们可以修改为:
toid:${requestScope.stu1.toid}
<br/>
stuname:${requestScope.stu1.stuname}
3,EL表达式运算
EL表达式支持简单的运算,比如加(+) 减(-),乘(*),除(/),取模(%)等
${15*4+9}
里面的数据也可以换成作用域中的变量属性
EL表达式也支持比较运算,计算后的结果为布尔值,即true或者false,比如大于(>),小于(<),大于等于(>=),小于等于(<=) 不等于(!=)
${2<4}
${i==15}
也可以使用逻辑运算符,比如:${i==15 && j==19 }
4,直接通过EL表达式来接受参数
${param.myname}或者${param['myname']}
这样就可以接收到从另外一个页面通过form表单提交的数据或者超级链接问号传递的参数数据。