一、EL表达式简介
EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。因为jsp需要和servlet交互,所以jsp和servlet相互传递数据时,少不了在jsp中使用servlet代码,但是对于一切前端做UI的工作人员就显得比较困难了,这时EL表达式正好解决了这个问题,也使得代码写起来更加简单也更加容易维护。使用EL表达式不需要另外添加jar包,因为jdk中自带有解析EL表达式的jar包
二、基本语法
(1)EL表达式怎么用
形如:{expression} 其中expression有两种方式存取数据比如user.username和user['username']来获取到user对象的username
ps:以下情况必须使用[]来获取数据:
1、当遇到存储的属性名称中存在.或者-等特殊字符时
{sessionScope.user.u-name} 是错误的,因为存在特殊字符
{sessionScope.user['u-name']} 是正确的
2、当遇到动态取值时
{sessionScope.user.name} 其中name是一个变量并不是user对象的name属性值,是取不出来值的
{sessionScope.user[name]} 是可以取出来的
这里的name可以理解为jsp页面的servlet代码里面的name变量,而不是对象自带属性
3、要在数组或集合使用索引取值时
{sessionScope.user[0].username} 表示取多个user对象中的第一个对象的用户名值
三、JSP中的隐含对象
当我们取值时可以省略最前面的sessionScope等存储数据的对象,比如当我们想要取{user,username},这时我们并没有指定user对象存储的范围,那么默认会从page开始查找,如果page中不存在该对象,就继续依次在request、session、application中查找user对象,知道找到user对象为止,假若在其中找到了user对象,就停止在下面的对象域中继续查找;假若一直到尾就没找到user对象那就返回一个null,null在jsp中显示为空白,不会出现null字样
{pageScope.user.username} | 在page域中查找user对象,并显示user对象中的username属性值 |
{requestScope.user.username} | 在request域中查找user对象,并显示user对象中的username属性值 |
{sessionScope.user.username} | 在session域中查找user对象,并显示user对象中的username属性值 |
{applicationScope.user.username} | 在application域中查找user对象,并显示user对象中的username属性值 |
隐含对象 | 类型 | 说明 |
pageContext | javax.servlet.ServletContext | 表示此JSP页面的pageContext |
pageScope | java.util.Map | 存数据的page域 |
requestScope | java.util.Map | 存数据的request域 |
sessionScope | java.util.Map | 存数据的session域 |
applicationScope | java.util.Map | 存数据的application域 |
param | java.util.Map | 如同ServletContext.getParameter(String name) 返回String类型的值 |
paramValues | java.util.Map | 如同ServletContext.getParameterValues(String name) 返回String[]类型的值 |
header | java.util.Map | 如同ServletContext.getHeader(String name) 返回String了类型的值 |
headerValues | java.util.Map | 如同ServletContext.getHeaders(String name) 返回String[]了类型的值 |
cookie | java.util.Map | 如同ServletContext.getCookies() |
initParam | java.util.Map | 如同ServletContext.getInitParameter(String name) 返回String类型的值 |
四、el表达式的运算
这个我打算多说,el表达式和许多面向对象语言的表达式一样,把不同的是el表达式中的运算符可以使用其他字符来代替,其实作用都是相同的,我个人认为了解一下就行了
==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge) &&(and) ||(or) !(not)