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,拥有标准的gettersetter方法。

然后在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}

2EL内置对象

 EL中也包含一些内置对象,也可以理解为EL内的关键字。

之前我们说过,EL中的属性会根据pagerequestsessionapplication这些作用域依次去找,这种方式虽然方便,但是在实际工作中有

几个缺点:当页面非常多的时候,连自己都不知道属性到底放在哪个作用域,这会给以后修改程序逻辑带来隐患;

每次从这些作用域依次去找会耗费一些性能。

所以,我们可以通过pageScope,requestScope,sessionScope,applicationScope这些内置对象来获取具体作用域中的变量属性。

比如上面的eltest1_request.jsp页面,我们可以修改为:

 toid:${requestScope.stu1.toid}

 <br/>

 stuname:${requestScope.stu1.stuname}

 3EL表达式运算

   EL表达式支持简单的运算,比如(+) (-),(*),(/),取模(%)

   ${15*4+9}

里面的数据也可以换成作用域中的变量属性

  EL表达式也支持比较运算,计算后的结果为布尔值,即true或者false,比如大于(>),小于(<),大于等于(>=),小于等于(<=) 不等于(!=)

   ${2<4}

   ${i==15}

也可以使用逻辑运算符,比如:${i==15 && j==19 }

 4,直接通过EL表达式来接受参数

   ${param.myname}或者${param['myname']}

这样就可以接收到从另外一个页面通过form表单提交的数据或者超级链接问号传递的参数数据。