JSTL标签
EL表达式可以通过JSTL标签迭代集合等功能
JSTL是SUN公司开发的一套标签库,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码
在JSP中使用JSTL标签需完成以下两个步骤
1、 导入jstl.jar和standerd.jar这两个JSTL的jar包
2、 在JSP页面使用<%@ tagliburl=” http://java.sun.com/jsp/jstl/core” prifix=”c” %> 元素导入标签库
url的地址是standerd.jar包中的/META-INF/c.tld文件中的<uri>http://java.sun.com/jsp/jstl/core</uri>标签中的地址
常用的JSTL标签
<c:foreach var=”” items=””>(迭代标签)
<%="<br/>-----------------------通过EL表达式配合JSTL来迭代list集合-------------------------------<br/>" %>
<%
//向list集合中存入Demo1的对象
List<Demo1> list = newArrayList<Demo1>();
list.add(new Demo1("aaa"));//构造方法会为此对象的name属性赋值
list.add(new Demo1("bbb"));
list.add(new Demo1("ccc"));
request.setAttribute("list", list);
%>
<c:forEach var="demo1"items="${list }">
${demo1.name }
</c:forEach>
<%--items="${list }" 通过EL表达式中取出这个集合,并将遍历的出的对象放入demo1变量中,
然后在通过EL表达式调用li这个对象的getName方法
--%>
<%="<br/>-----------------------通过EL表达式配合JSTL来迭代map集合-------------------------------<br/>" %>
<%
//向map集合中以键值对的方式存入Demo1对象
Map<String, Demo1> map = new HashMap<String,Demo1>();
map.put("d1", new Demo1("d111111"));//构造方法会为此对象的name属性赋值
map.put("d2", new Demo1("d222222"));
map.put("d3", new Demo1("d333333"));
map.put("d4", new Demo1("d444444"));
request.setAttribute("map", map);
%>
<c:forEach var="entry"items="${map }">
${entry.key } : ${entry.value.name }
</c:forEach>
<%--
//上面entry变量得到的就相当于下面it得到的
Set<Map.Entry<String,Demo1>> set = map.entrySet();
Iterator<Map.Entry<String,Demo1>> it = set.iterator();
//上面EL表达式所输出的就相当于下面out对象所输出的
while(it.hasNext()){
Map.Entry<String, Demo1>entry = it.next();
out.print(entry.getKey()+":"+entry.getValue().getName());
}
也就是说当map集合对象被遍历出来的对象就是一个Map.Entry对象
${entry.key} : ${entry.value.name }就是在在调用Map.Entry的getKey方法
及调用 Map.Entry的getValue方法再通过其返回对象,调用其对象的getName方法
--%>
<c:if test=””>(测试标签,判断)
<%="<br />-----------------------测试(判断)标签的使用-------------------------------<br />" %>
<%
//pageContext.setAttribute("user", "张三");
%>
<c:if test="${user!=null }">
pageContext域中的user值为:${user }
</c:if>
<c:if test="${user==null }"><!—EL表达式也可以用${empty user};表示如果user为null的话就返回ture,empty关键字还可以检测集合如:${empty map},意思是当map集合等于null,或者map的isEmpty()方法返回为true(也就是map中没有映射关系时) ,那么此EL表达式就返回false -->
pageContext域中没有值
</c:if>
<%--当在四个域中取到user的值(映射关系)后就输出第一句话,否则输出第二句话,也就是说当test的值为true时此标签中的内容才会被执行 --%>