el表达式

1、EL简介

JSP 2.0引入了一个新的特性——表达式语言。表达式语言可以和JSTL结合使用,也可以和Scriptlets结合使用。通过表达式语言,可以简化在JSP开发中的对象的引用。

2、语法结构
${expression}

通过表达式语言,可以非常简单地访问JavaBean中的属性,比如JSP中可以这样访问一个简单的参数:${userName}

也可以这样访问一个嵌套的参数:${userBean.userName.firstName}

表达式语言也可以和JSTL结合使用,如:

<c:iftest=”${sessionScope.car.numberOfItems>0}”>

……

</c:if>

JSP表达式可以包含运行逻辑,如:

<c:iftest=”${bean1.a<3 && bean1.a>0}”>

……

</c:if>

表达式包含在${}之间,如果需要在客户端输出${字符,那么可以使用以下的方式:<c:outvalue=”an expression is ${‘${’}true}”/>

为了和JSP以前的规范兼容,可以在页面前面声明是否忽略表达式,通过以下语句声明:<%@ pageisELIgnored=”true|false”%>

如果声明为true,那么将忽略表达式语言:如果为false,那么容器将解析表达式语言。

3、变量

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

假如途中找到username,就直接回传,不再继续找下去,。

通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。

属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope

使用EL表达式获取request、session、applection域中的数据。

使用EL表达式获取List、Map集合中的元素。

<div align="center">
<h1>EL表达式的使用</h1>
<hr color="red">
<%--
pageContext.setAttribute("name","jiao");
request.setAttribute("name","heyley");

--%>
<br>
${name1}
<%--可以获取对象的属性值 --%>
<%
User entity=new User();
request.setAttribute("user",entity);
%>

<br>
${user.edu}
<%--可以获取bean中的bean中的……属性 --%>
${user.address.city.name}
<%--获取List集合中值 --%>
<%
List list=new ArrayList();
list.add(new User());
// list.add(new User());
request.setAttribute("list",list);
%>
<br>
${list[0].edu }
<%--获取 map集合中值--%>
<%
Map map=new HashMap();
map.put("xx1","heyley1");
map.put("xx2","heyley2");
map.put("xx3","heyley3");
map.put("xx4","heyley4");
map.put("5","heyley5");
request.setAttribute("map",map);
%>
<br>
${map.xx2 }
${map["5"] }
</div>

使用EL表达式获取Bean属性:使用${customerBean.address}的形式来访问JavaBean对象的属性;

<c:forEach var="good" items="${goodlist}">
<tr>
<td width="120" height="10" align="center">
${good.name}
</td>
<td width="120" height="10" align="center">
${good.model}
</td>
<td width="120" height="10" align="center">
${good.price}
</td>
<td width="120" height="10" align="center">
${good.number}
</td>
<td width="120" height="10" align="center">
${good.maker}
</td>
</tr>
</c:forEach>

EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。

4、EL隐含对象

与范围有关的隐含对象

与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和applicationScope;

它们基本上就和JSP的pageContext、request、session和application一样;

在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

例如:我们要取得session中储存一个属性username的值,可以利用下列方法:session.getAttribute("username")取得username的值

在EL中则使用下列方法${sessionScope.username}

与输入有关的隐含对象

与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。

param:把请求中的参数名和单个值进行映射。

paramValues:把请求中的参数名和一个array值进行映射。

例如我们要取得用户的请求参数时,可以利用下列方法:request.getParameter(Stringname)、 request.getParameterValues(Stringname)

在EL中则可以使用param和paramValues两者来取得数据。${param.name} 、 ${paramValues.name}

其他隐含对象

cookie

cookie:把请求中的Cookie名字和单一的值进行映射。JSTL并没有提供设定cookie的动作。

例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}来取得它。

header和headerValues

header:把请求中的header名字和单个值映射。

headerValues:把请求中的header名和一个array值进行映射。

header 储存用户浏览器和服务端用来沟通的数据。例:要取得用户浏览器的版本,可以使用${header[‘User-Agent’]}

另外在很少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。

initParam

initParam:把上下文的初始参数和单一的值进行映射。

initParam取得设定web站点的环境参数(Context)

例:一般的方法

String userid =(String)application.getInitParameter("userid");

可以使用 ${initParam.userid}来取得名称为userid

pageContext

pageContext:JSP页面的上下文,它提供了访问以下对象的方法:

ServletContext,Servlet的上下文信息;

Session,客户端的Session对象:

Request,请求对象;

Response,对客户端响应的队象。

例如: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} 取得主机端的服务信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值