其他更多 java 基础文章: java 基础学习 (目录)
一, EL 表达式
EL 全名为 Expression Language.JSP 中可以使用 EL 表达式, EL 表达式是用 "${}" 括起来的脚本, 用来更方便地读取对象, EL 表达式写在 JSP 的 html 代码中, 而不能写在 "<%%>" 引起的 JSP 脚本中
EL 表达式的功能:
获取数据: EL 表达式主要用于替换 JSP 页面中的脚本表达式, 以从各种类型的 web 域 中检索 java 对象, 获取数据.(某个 Web 域 中的对象, 访问 javabean 的属性, 访问 list 集合, 访问 map 集合, 访问数组)
执行运算: 利用 EL 表达式可以在 JSP 页面中执行一些基本的关系运算, 逻辑运算和算术运算, 以在 JSP 页面中完成一些简单的逻辑运算.${user==null}
获取 Web 开发常用对象: EL 表达式定义了一些隐式对象, 利用这些隐式对象, Web 开发人员可以很轻松获得对 Web 常用对象的引用, 从而获得这些对象中的数据.
调用 Java 方法: EL 表达式允许用户开发自定义 EL 函数, 以在 JSP 页面中通过 EL 表达式调用 Java 类的方法.
1.1, 获取数据
使用 EL 表达式获取数据语法:"${标识符}"
EL 表达式语句在执行时, 会调用 pageContext.findAttribute 方法, 用标识符为关键字, 分别从 page,request,session,application 四个域中查找相应的对象, 找到则返回相应对象, 找不到则返回 "" (注意, 不是 null, 而是空字符串). ${abc}
EL 表达式可以很轻松获取 JavaBean 的属性, 或获取数组, Collection,Map 类型集合的数据.${requestScope.emp.address.street}
1.2, 执行运算
语法:${运算表达式},EL 表达式支持如下运算符:
1) 关系运算发
2) 逻辑运算符
3)empty 运算符: 检查对象是否为 null(空),${!empty(list)}
4) 二元表达式:${user!=null? http://user.name :""}
5)[ ] 和 . 号运算符
1.3, 获得 Web 开发常用对象
EL 表达式语言中定义了 11 个隐含对象, 使用这些隐含对象可以很方便地获取 Web 开发中的一些常见对象, 并读取这些对象的数据.
分析:
pageScope,requestScope,sessionScope,applicationScope 代表四个作用域对象 (用于保存属性的 Map 对象)
pageContext: 表示的是 JSP 中内置对象 pageContext, 能获取 request 等其他 JSP 八大内置对象
param: 表示一个请求参数, ${param.username} 等效 request.getParameter("username");(表示一个保存了所有请求参数的 Map 对象)
paramValues: 表示一组请求参数,${paramValues.abc} 等效 request.getParameterValues("abc"); 这种多选框 (表示一个保存了所有请求参数的 Map 对象, 它对于某个请求参数, 返回的是一个 string[])
header: 表示一个请求头,${header.referer} 等效 request.getHeader("referer");
headerValues: 表示一组请求头,${header.cookie} 等效 request.getHeaders("cookie"); 获取的请求头参数中的内容是一组内容, 比如 cookie 就有可以是多个 cookie 一起传过来
cookie: 获得 cookie 对象 (表示一个保存了所有 cookie 的 Map 对象)
initPatam:Web 项目初始化参数, servletContext.getInitParameter("xxx");(表示一个保存了所有 Web 应用初始化参数的 map 对象)
注意 1: 还有一种特殊的用法, 直接获取对象变量 ${user.username},user 为 User 的一个实例对象, 并且存放在 page 作用域中, 上面这句代码的意思是, 依次从 page,request,session,application 作用域查找 user 对象, 直到找到为止, 底层使用的是 pageContext.findAttribute(); 是一样的效果.
注意 2: 测试 header 和 headerValues 或者有些参数时, 如果头里面有 "-" , 例 Accept-Encoding, 则要 header["Accept-Encoding"],headerValues["Accept-Encoding"] 测试 cookie 时, 例 ${cookie.key} 取的是 cookie 对象, 如访问 cookie 的名称和值, 须 ${ http://cookie.key.name } 或 ${cookie.key.value}
二, 总结
EL 表达式比较简单, 使用它的目的是为了减少 JSP 脚本, 尽量不要在 HTML 中嵌入 Java 代码, 显的很混乱, 而在 HTML 中使用 EL 表达式, 就比较好来获取 JSP 中各种对象, 获取四大作用域中的值,
如果要获取四大作用域中的数据, 则可以使用 { http://pageScope.xxx }
如果想要获取请求参数, 则使用 param 或 paramValues
如果想要获取请求头中的一些信息, 获取想要获取 Servlet 的一些对象, 比如 request,session 等, 可以使用 pageContext 来获取 request 对象, 然后在获取所需要的信息, 或者直接使用 header 对象来获取头信息
如果想获取 Web 初始化参数, 则使用 initPatam.
最主要的是要记得 EL 中有哪 11 个内置对象, 知道了他们就知道了 EL 可以获取哪些信息.
来源: https://juejin.im/post/5c160421e51d454db56358fe