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表单提交的数据或者超级链接问号传递的参数数据。


https://blog.51cto.com/7915791/1309773