EL是jsp的内置表达式语言,从jsp2.0开始,用来替代<%=..%>表达式。
1 el获取简单的数据
<body>
<%
request.setAttribute("requestKey", "requestValue");
session.setAttribute("sessionKey", "sessionValue");
pageContext.setAttribute("pageKey", "pageValue");
application.setAttribute("applicationKey", "applicationVlaue");
%>
获取域对象属性旧方式:
<%=request.getAttribute("requestKey") %><hr>
<%=session.getAttribute("sessionKey") %><hr>
<%=pageContext.getAttribute("pageKey") %><hr>
<%=application.getAttribute("applicationKey") %><hr>
使用EL获取简单数据:
${requestScope.requestKey }<br>
精简的写法:
${pageKey}
</body>
使用jsp脚本往request域中添加了一些简单的数据。获取request域数据有两种方式,一种依然是使用jsp脚本来获取,另一种方式是使用el来获取。可见el方式获取域对象中的值比jsp简单得多。
最常用的el获取域对象中数据的方式是:
${属性名}
2 el获取集合中的数据
<body>
<%
request.setAttribute("arr", new String[]{"aaa","bbb","ccc"});
List<String> list=new ArrayList();
list.add("list1");
list.add("list2");
list.add("list3");
request.setAttribute("list", list);
Map<String,String>map=new HashMap();
map.put("01", "jilaing");
map.put("02", "jiaming");
map.put("age", "13");
request.setAttribute("map", map);
pageContext.setAttribute("arr.age", "myAge");
%>
旧方式获取Map中的数据:<br>
<%=((HashMap<String,String>)request.getAttribute("map")).get("01") %><br>
获取request中的数组元素${arr[1]}<br>
获取request中的List中的元素 ${list[1]}<br>
获取request中的map元素${map.age}<br>
获取PageContext特殊形式的元素 ${pageScope["arr.age"]}
</body>
可见,使用el获取域中的数组和list集合方式相同。el获取域中的map对象的方式是:${域中的名称.键名}
3 el中的cookie对象
cookie是el中11个内置对象之一,相比较其他的对象,cookie对象用得更多更频繁。
<body>
<!--第一次打开该页面,cookie没有值,但服务器会将cookie写回浏览器。第二次访问页面的时候就有了 -->
<%
Cookie cookie=new Cookie("ceshi","value");
response.addCookie(cookie);
%>
cookie的值是:<br>
${cookie.ceshi.value }
</body>
第一次打开该页面,cookie没有值,但服务器会将cookie写回浏览器。第二次访问页面的时候就有了。
el获取cookie的方式比java更简单,格式:cookie.cookie名称.cookie值。
4 el获取javabean数据
public class User implements Serializable {
private String name;
private String id;
private String sex;
public User() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
<body>
<%
User user=new User();
user.setId("1342644");
user.setName("kun ge");
user.setSex("nan");
session.setAttribute("u", user);
%>
老方式获取user的id值:
<%= ((User)session.getAttribute("u")).getId() %> <br>
el方式获取user的id值:
${u.id }
</body>
5 el进行加法计算
<body>
<%
request.setAttribute("q", 5);
request.setAttribute("w", "10");
request.setAttribute("e", "9");
request.setAttribute("r", 12);
%>
el进行加法运算:
${q+w }<br>
</body>
运行结果为15。
6 jstl中的判断语句
<body>
<%
ArrayList list =new ArrayList();
request.setAttribute("li",list);
%>
<c:if test="${ empty li}">list 为空</c:if>
</body>
jstl往往和el配合使用。
empty运算符表示集合长度是否为0或者对象是否为空。
test中的值为el判断表达式。c:if标签内的内容为条件满足后执行的内容。
7 jstl中的forEach
7.1 输出0-20的所有偶数
<c:forEach begin="0" end="20" step="2" var="i" varStatus="vs">
${i }--${vs.count }--${vs.current }
</c:forEach>
begin表示循环从哪里开始,end表示循环到哪里结束,step便是步长,每次循环相加多少。var是给循环的元素起一个名字。varStatus表示循环状态。
7.1 遍历集合
<%
//向域中添加list集合
List list=new ArrayList();
list.add("11");
list.add("22");
list.add("33");
application.setAttribute("li", list);
//向域中添加Map集合
Map map=new HashMap();
map.put("name","jialiang");
map.put("age", 23);
application.setAttribute("hashMap", map);
%>
<c:forEach items="${li }" var="item" varStatus="vs">
${item }
</c:forEach>
<hr>
<c:forEach items="${hashMap }" var="item" varStatus="vs">
${item.key }--${item.value }
</c:forEach>
注意,item.key表示map中的键,item.value表示map中的 value