以MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码。
在使用JSP标准动作操作 JavaBean时,如果JavaBean的属性是 String类型或者基本类型,则能够实现类型的自动转换,如 JavaBean的属性从String类型可自动转换成int类型。如果 Javabean中的属性不是 String类型和基本类型,而是一个 Object类型,并且属性还有自己的属性,如何获得此 Object类型的属性呢?JSP标准动作中没有提供这种嵌套式访问机制,所以要想实现这个功能,就只能在JSP页面中通过Java代码来读取 Object类型的属性。从JSP2.0之后,可以使用EL表达式来处理这样的的问题。
所以, EL是JSP 2.0增加的技术规范,其全称是表达式语言(Expression Language)。EL语言的灵感来自于ECMAScript和XPath表达式语言。EL表达式语言是一种简单的语言,提供了在JSP中简化表达式的方法,目的是为了尽量减少JSP页面中的Java代码,使得JSP页面的处理程序编写起来更加简洁,便于开发和维护。
[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${ user. My-Name}应当改为${user["My-Name"]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传""。EL表达式的属性如下:
JSP 表达式语言提供以下操作符,其中大部分是 Java 中常用的操作符:
隐式对象
JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用:
此外,还提供几个隐式对象,允许对以下对象进行简易访问:
1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
2、 注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。
3、全局禁用EL表达式,在web.xml中进行如下配置:
1 2 3 4 5 6 |
|
1 |
|
1、例如:
< %=request. getParameter(“username”)% > 等价于 ${ param. username }
2、例如:下面的那句EL语言可以完成如果得到一个username为空,则不显示null,而是不显示值。
<%=user.getAddr( ) %> 等价于 ${user.addr}。
3、例如:
<%=request.getAttribute(“userlist”) %> 等价于$ { requestScope.userlist }
4、例如:原理如上例3。
${requestScope.userlist} 1
${sessionScope.userlist} 2
${applicationScope.userlist} 3
${pageScope.userlist} 4
${userlist} 含义:执行顺序为4 1 2 3。
“.”后面的只是一个字符串,并不是真正的内置对象,不能调用对象。
5、例如:
<%=user.getAddr( ) %> 等价于 ${user.addr}
第一句前面的user,为一个变量。
第二句后面user,必须为在某一个范围里的属性。