EL简介
表达式语言-EL为web页和Bean管理提供了进行通信的机制。
EL表达式提供了获取对象及属性的简单方式,还支持简单的运算。
先看一个简单的例子,比如平时常用的:获取session中的username参数
- 使用Java代码片段
<%
if(null!=session.getAttribute("username")){
out.print(session.getAttribute("username").toString());
}
%>
- 使用EL表达式
${username}
EL的特点
- 可以与JSTL及javascript语句结合使用
- 可以执行类型转转换
- 不仅可以访问一般的变量,而且还可以访问JavaBean中的属性、嵌套属性和集合对象。
- 可以执行算术运算、逻辑运算、条件运算
- 可以获得命名空间(PageContext对象,这是页面中所有其他内置对象的最大范围的集成对象,通过他可以访问其他内置对象)
- 在执行除法运算时,0做除数不会返回错误,而是返回无穷大
- 可以访问JSP作用域(request、session、application及page)
- 扩展函数可以和JAVA类的静态方法执行映射
禁用EL
- 单句
\${username} // 在前面加"\"就可以了
- 整个页面
<%@ page isELIgnored="true" %>
- 禁用服务器中的EL
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
EL保留关键字
and | eq | gt | true |
instanceof | div | or | ne |
le | false | empty | mod |
not | lt | ge | null |
EL访问数据
${userInfo.name}
${userInfo[name]}
EL判断对象是否为空
${empty user}
EL执行条件运算
${empty user? "是空的":"不是空的"}
EL的隐含对象
- 页面上下文对象
页面上下文对象为pageContext,用于访问JSP内置对象(如:request、response、out、session、exception和page等)
但不能用于获取application、config、pageContext对象和servletContext对象,获取这些对象后,即可获取其属性值
(1)访问request对象
${pageContext.request}
获取request对象后,即可通过该对象获取与客户端相关的信息。如:HTTP报头信息 客户信息提交方式 客户端主机IP地址和端口
eg获取端口号:${pageContext.request.serverPort}
(2)访问response对象
${pageContext.response}
eg返回响应的内容:${pageContext.response.contentType}
(3)访问out对象
${pageContext.out}
eg返回缓冲区大小:${pageContext.out.bufferSize}
(4)访问session对象
${pageContext.session}
eg返回session有效时间:${pageContext.session.maxInactiveInterval}
(5)访问exception对象
${pageContext.exception}
eg返回JSP页面异常信息:${pageContext.exception.message}
(6)访问page对象
${pageContext.page}
eg获取page对象:${pageContext.page.class}
(7)访问servletContext对象
${pageContext.servletContext}
eg返回servlet上下文信息:${pageContext.servletContext.contextPath}
- 访问作用于范围的隐含对象
EL提供了4个用于访问作用域范围的隐含对象,即pageScope requestScope sessionScope applicationScope
(1)pageScope隐含对象
<jsp:useBean id="user" class="Model.User">
<jsp:setProperty name="user" property="name" value="张三"></jsp:setProperty>
</jsp:useBean>
运用pageScope隐含对象获取JavaBean实例的name属性
${pageScope.user.name}
(2)requestScope隐含对象
<%
request.setAttribute("username","YEN");
%>
${requestScope.username}
(3)sessionScope隐含对象
<%
session.setAttribute("username","YEN");
%>
${sessionScope.username}
(4)applicationScope隐含对象
<%
application.setAttribute("username","YEN");
%>
${applicationScope.username}
- 访问环境信息的隐含变量
(1)param对象
param对象用于获取请求参数的值 应用在参数只有一个的情况
在login.jsp中:<input type="text" name="name">
获取提交过来的值:${param.name}
(2)paramValues对象
<input id="user" type="text" name="name" value="YEN">
<input id="user" type="text" name="sex" value="MEN">
<input id="user" type="text" name="age" value="20">
获取到的信息为:${paramValues.user[0]}${paramValues.user[1]}${paramValues.user[2]}
(3)header和headerValues对象
header对象用于获取HTTP请求的一个具体的header值 但某些情况下,可能存在同一个header拥有多个不同的值 这是就必须使用headerValues对象
eg:获取HTTP请求的connection(是否需要持久连接)属性 ${header.connection}或${header["connection"]}
(4)initParam对象
用于获取web应用初始化参数的值
eg:在web.xml中有
<context-param>
<param-name>username</param-name>
<param-value>YEN</param-value>
</context-param>
获取值:${initParam.username}
(5)cookie对象
<%
Cookie cookie=new Cookie("username","YEN");
response.addCookie(cookie);
%>
获取值:${cookie.username.value}
定义和使用EL函数
定义和使用函数包括以下三个步骤:
(1)编写一个Java类,并在其中编写静态的公共方法,用于实现自定义EL函数的具体功能
(2)编写标签库描述文件申明函数,该文件的扩展名为".tld",保存在web应用的WEB-INF文件夹下
(3)在JSP页面中引用标签库,并调用定义的EL函数实现相应的功能