为什么需要EL
在jspy页面中嵌入大量的Java代码
访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换
EL表达式简介:
Expression Language(表达式语言)
功能:替代JSP页面中数据访问时的复杂编码
特点:自动转换类型(EL得到某个数据时可以自动转换类型)
使用简单
EL语法:
${EL expression}
通过变量名取值
获取对象的属性值
获取集合元素
执行表达式
按照page——request——session——application的作用域顺序依次查找,找到即返回,最终找不到返回null值。
获取对象的属性值
<%=((User) request.getAttribute("user")).getName()%>
点操作符
${user.name}
[]操作符
${user["name"]}
获取集合元素-List
// 在Servlet或JSP中保存数据
List names = new ArrayList();
names.add(0, "LiYang");
names.add(1,"WangHua");
request.setAttribute("names",names);
// 在JSP中访问数据
姓名:${ names[0] }<br/>
姓名:${ names[1] }<br/>
获取集合元素 - Map
// 在Servlet或JSP中保存数据
Map names = new HashMap();
names.put("one", "LiYang");
names.put("two", "WangHua");
request.setAttribute("names", names);
// 在JSP中访问数据
姓名:${ names.one }<br/>
姓名:${ names["two"] }<br/>
执行表达式
关系操作符
逻辑操作符
empty操作符
若变量 a为null,或长度为零的String,或size为零的集合 则${ empty a }返回的结果为true ${ not empty a }或${ ! empty a }返回的结果为false
EL隐式对象
EL隐式对象介绍:
什么是JSTL
JSP标准标签库;JSTL的优点:
提供一组标准标签,可用于编写各种动态功能。
JSTL通常会与EL表达式合作实现jsp页面的编码。
为什么使用JSTL
实现了jsp代码的可复用,基于标签库原理,重复率较高的代码可支持复用,提高效率。
书写jsp页面可读性更强。
使用JSTL的步骤:
1.引入JSTL的jar文件和标签库描述符文件
2.在JSP页面添加taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3.使用JSTL标签
JSTL标准标签库介绍
JSTL标准标签库中的常用标签
1.通用标签:
set:设置指定范围内的变量值
//将value值存储到范围为scope的变量variable中
<c:set var="variable" value="value" scope="scope" />
//将value值设置到对象的属性中
<c:set target="target" property="property" value="value" />
//示例
// 在Servlet或JSP中设置JavaBean
User user = new User();
request.setAttribute("user", user);
// 在JSP中修改JavaBean的属性值
<c:set target="${user}" property="name" value="defaultName" />
out:计算表达式并将结果输出显示。
//不指定默认值
<c:out value="value" />
//指定默认值
<c:out value="value" default="default" />
//示例
// 在Servlet或JSP中设置JavaBean
User user = new User();
request.setAttribute("user", user);
// 在JSP中输出JavaBean的属性值
<c:out value="${user.name}" default="No UserName" />
remove:删除指定范围内的变量
2.条件标签:
if:实现Java语言if功能
语法:
<c:if test="codition" var="variable" scope="scope" >
</c:if>
/*
*test是判断条件表达式返回true/false
*var用于保存返回true/false
*scope指定var变量的作用域
*/
choose:实现if - else if - else语句的功能
语法:
<c:choose> <c:when test="condition1"> // 内容1 </c:when> <c:when test="condition2"> // 内容2 </c:when> // …… <c:otherwise> // 内容n </c:otherwise> </c:choose >
3.迭代标签:
forEach:实现对象集合的遍历
语法:
<c:forEach items="collection" var="varName" begin="start"
end="end" step="stepSize" varStatus="status" >
</c:forEach>
//items指定要遍历的集合对象.
//begin指定从集合的第几位开始.
//end指定迭代到集合的第几位结束.
//step指定循环的步长.
//varStatus属性用于存放var引用的成员的相关信息,如索引等.
List集合和Map集合语法使用:
List products = GoodsDao.getAllProducts();
request.setAttribute("products", products);
// 在JSP中展示数据
//<!-- 循环输出商品信息 -->
<c:forEach items="${requestScope.products}" var="product"
varStatus="status">
//<!-- 如果是偶数行,为该行换背景颜色 -->
<tr <c:if test="${status.index % 2 == 1 }">
style="background-color:rgb(219,241,212);"</c:if>>
//调用工厂函数,输出商品
<td>${product.name }</td>
<td>${product.area }</td>
<td>${product.price }</td>
</tr>
</c:forEach>
//requestScope.products是循环遍历集合。
//<c:if></c:if>判断奇偶行
//通过迭代标签遍历Map
// 在Servlet或JSP中准备数据
Map<String, String> map = new HashMap<String, String>();
map.put("tom", "美国");
map.put("lily", "英国");
map.put("jack", "中国");
request.setAttribute("map", map);
// 在JSP中展示数据
<c:forEach items="${requestScope.map}" var="entry">
${ entry.key }
${ entry.value }<p>
</c:forEach>