EL表达式的作用就是动态的显示不同作用域中的对象中封装的数据,它有效的简化了JSP页面中显示数据的方式。类似于El表达式的还有 JSTL 表达式,在struts2中还有OGNL表达式都有相同的作用。
- 在EL表达式中提供了[] 和.俩种表达式来存取数据。
如果存取的属性名称中包含一些特殊字符,比如 . ? _等非字母或数字的符号,这时应该使用的是[ ]。
如:${user.name}是正确的,如果使用${user[name]}则是不正确的。
${user.First-name}应当改为${user[First-name]}
如果实现动态取值的话,就必须要使用 []
- EL表达式存取数据的方法很简单,例如${username}。它的作用就是取出某一范围内名称为username的变量
因为并没有指定从那个范围的usernsmr,所以他会依序从Page、Request、Session、Application范围查找,如果找到,则直接回显,如果没有,则返回null.
范围在EL表达式中的名称分别为:PageScope、RequestScope、SessionScope、ApplicationScope
- 与输入有关的隐含对象有俩个:param和paramValues,他们是EL中比较特别的隐含对象,例如我们获取用户的请求参数的时候:
request.getParameter(String name);
request.getParameterValues(String name);
在EL表达式中可以使用param和paramValues俩者来取得数据。
${param.name}
${paramValue.name}
- JSTL并没有提供设定cookie的动作,如果获取cookie中的一个名称为username的值,可以使用${cookie.username}来获取
- header存储用户浏览器和服务器用来沟通的数据,如获取浏览器的版本,可以使用${header["User-Agent"]}
- initParam取得web站点设定的环境参数:String userid = (String)application.getInitParameter("userid");可以使用${initParam.userid}来获取
- 通过pageContext取得其他有关用户要求或页面的详细信息。
${pageContext.request.queryString} 取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
在mvc模式下,jsp的主要作用是用来显示数据,因此,EL表达式在定义函数,进行运算的时候并不多。
EL中的基础操作符
EL表达式支持大部分Java所提供的算术和逻辑操作符:
操作符 | 描述 |
---|---|
. | 访问一个Bean属性或者一个映射条目 |
[] | 访问一个数组或者链表的元素 |
( ) | 组织一个子表达式以改变优先级 |
+ | 加 |
- | 减或负 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 测试是否相等 |
!= or ne | 测试是否不等 |
< or lt | 测试是否小于 |
> or gt | 测试是否大于 |
<= or le | 测试是否小于等于 |
>= or ge | 测试是否大于等于 |
&& or and | 测试逻辑与 |
|| or or | 测试逻辑或 |
! or not | 测试取反 |
empty | 测试是否空值 |
JSP EL中的函数
JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:
${ns:func(param1, param2, ...)}
ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:
${fn:length("Get my length")}
要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。