JSP之el表达式
EL(Expression Language) 是为了使JSP写起来更加简单。
1、语法结构
${expression}
2、"[ ]"与"."运算符
> EL 提供“.“和“[ ]“两种运算符来存取数据。
> 当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${ user. My-Name}应当改为${user["My-Name"]}
> 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
3、变量
> EL存取变量数据的方法很简单,例如:${username}。
它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
4、举例说明
> < %=request. getParameter(“username”)% > 等价于 ${ param. username }
但是username为null时,前者在页面渲染时显示为null,el表达式渲染时,不现实任何内容;
这种情况是由于servlet往jsp传参属于HttpRequest所以就是request作用域;
> <%=request.getAttribute(“userlist”) %> 等价于$ { requestScope.userlist }
getAttribute使用前,需要setAttribute,同时设置响应的作用域:从小→大,执行顺序,即从小的作用往大的作用域找userlist的对象
page作用域<------------->${pageScope.userlist}
request作用域<------------->${requestScope.userlist}
session作用域<------------->${sessionScope.userlist}
application作用域<------------->${applicationScope.userlist}
> <%=user.getAddr( ) %> 等价于 ${user.addr}
第一句前面的user,为一个变量。
第二句后面user,必须为在某一个范围里的属性。
5、特别强调
> 注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。
例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
> 注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止,FALSE表示不禁止。JSP2.0中默认的启用EL语言。
Page | PageScope |
Request | RequestScope |
Session | SessionScope |
Application | ApplicationScope |