小谈EL表达式
在jsp中常看到${pageContext.repuest.contextPath},这其实就是一个EL表达式。
特点:
- ${为始,}为终
- 中间内容为值,或者说对象的属性
- 可以使用域运算符,也就是“.”,也可以使用[]
- 在值有特殊符号,如‘-’‘.’时必须使用[]运算符,且‘.’和’[]’可以同时使用在一个表达式中
例如
${pageContext.repuest.contextPath}等同于${pageContext.repuest[“contextPath”]}
${scope[”my-value”] },写成${scope.my-value}不对
使用[]可以实现动态取值,在[]中传入变量,eg:[变量]
${scope[var] },var为变量,var不同,取到的值不同,如果用’.’无法实现,只能写死,但硬编码需要避免。
范围
- PageScope
- RequestScope
- SessionScope
- ApplicationScope
以上范围从大到小,但未指定范围是,由PageScope到ApplicationScope逐级寻找。
隐藏对象
对象 | 含义 |
---|---|
pageContext | 表示此JSP的PageContext |
pageScope | 取得Page范围的属性名称所对应的值 |
requestScope | 取得Request范围的属性名称所对应的值 |
sessionScope | 取得Session范围的属性名称所对应的值 |
applicationScope | 取得Application范围的属性名称所对应的值 |
param | 同ServletRequest.getParameter(String name)回传String类型的值 |
paramValues | 同ServletRequest.getParameterValues(String name)回传String[]类型的值 |
header | ServletRequest.getHeader(String name) |
headerValues | ServletRequest.getHeaders(String name) |
cookie | HttpServletRequest.getCookies() |
initParam | ServletContext.getInitParameter(String name) |
为防止硬编码,经常使用一下表达式
表达式 | 含义 |
---|---|
${pageContext.request.contextPath} | 服务的webapplication的名称 |
${pageContext.request.method} | 取得HTTP的方法(GET、POST) |
${pageContext.request.protocol} | 取得请求的参数字符串 |
${pageContext.servletContext.serverInfo} | 取得主机端的服务信息 |
${pageContext.session.id} | 取得session的ID |
${pageContext.request.protocol} | 取得使用的协议(HTTP/1.1、HTTP/1.0) |
${pageContext.request.remoteAddr} | 取得用户的IP地址 |
${pageContext.request.remoteUser} | 取得用户名称 |
关系运算符:
- == 或 eq
- != 或 ne
- < 或 lt
- > 或 gt
- <= 或 le
- >= 或 ge
- 记忆:equal/ not equal/ greater than/ less than/ less than or equal/ great than or equal/
- ${3<=5}或${3le5}
逻辑运算符:
- &&或 and
- || 或 or
- !< 或 not
- ${! A }或${not A}
三元条件表达式:
- ${ A ? B : C}
Empty 运算符
- || 或 or
- 当A为null时,表达式${empty A}返回true。
- 当A是空串时,表达式${empty A}返回true。
- 当A是数组、List或Map对象时,如果A中没有任何元素,表达式${empty A}返回true。
- 其他的情况返回false。