EL(Expression Language)即表达式语言,是一种方便访问Java组件的脚本语言,用来代替JSP中复杂的Java代码
一. 简介
1) 语法结构
${expression}
2) []和. 运算符
EL提供.和[]两种运算符来存取数据. 当存取的属性包含一些特殊字符, 如. 或?等并非字母或数字符号,一定要用[]
String name = ${user.his-name} 应该改为: String name= ${user[his-name]} // 这时候就需要用[]
[]可以做到动态取值,.无法做到动态取值.
3) 变量范围
${userName}他会从Page, Request, Session, Application范围中查找变量,如果找到,就回传,不再继续找下去,如果都没有,则返回NULL.
属性范围 | EL中的名称 |
Page | PageScope |
Request | RequestScope |
Session | SessionScope |
Application | ApplicationScope |
4) 页面启用EL语言
<span style="font-size:14px;"><%@page isELIgnored="false"%></span>
true表示禁止, false表示启用
5) EL可以显示逻辑表达式, 关系表达式, 算术表达式
${true and false} 结果 false
${5>6} 结果 false
${5+6} 结果11
二 . EL 隐含对象
1) 与范围有关的隐含对象(往4个范围对像里面存属性)
例, ${sessionScope.userName} ,等于session.getAttribute("userName");
2) 与输入有关的隐含对象
如果url中get方式传递的参数格式为?name="小明"&name="小赵"&age="19"
和post提交的表单参数都可以这样取值
String age = request.getParameter("age"), == ${param} 表示返回请求参数中单个字符串值.
String[] name = request.getParameterValues("name"), ==${paramValues} 表示返回的是一个数组
3) 其他隐含对象
A . cookie
例:cookie中有个设定名称为userCountry的值,可以使用${cookie.userCountry} 来取得它。
B. header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
C. initParam
设定web站点的环境参数(Context), ${initParam.userid}来取得名称为userid
一般方法String userid = (String)application.getInitParameter("userid");
D. pageContext
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} 取得主机端的服务信息
注意:
在Spring 中,所有逻辑处理单元返回的结果数据(Controller层方法return的数据),都将作为Attribute 被放置到HttpServletRequest 对象中返回, 也就是说SpringMVC 中,结果数据对象默认都是requestScope, 在框架中不要用$(session.取值)。
具体实现可参见Spring 源码中org.springframework.web.servlet.view.InternalResourceView.exposeModelAsRequestAttributes方法的实现代码,