EL表达式
在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要书写很多Java代码,这样的做
法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。EL是Expression Language的缩写,它是一-种简单的数据访问语言。
EL语法
${ 表达式}
EL内置对象
分类 | 内置对象名称 | 描述 |
---|---|---|
作用域 | pageScope | page作用域 |
requestScope | request作用域 | |
sessionScope | session作用域 | |
applicationScope | applicationScope作用域 | |
请求参数 | param | 获得一个参数 |
paramValues | 获得一组参数 | |
请求头 | header | 获得一个请求头 |
headerValues | 获得一组请求头 | |
JSP上下文对象 | pageContext | |
全局初始化参数 | initParam | |
cookie | cookie |
EL的使用
获取数据
${requestScope.commpany } // 获取字符串
${sessionScope.user.name } // 获取对象属性
${applicationScope.users[0].name } // 获取集合属性
注意:当属性名中有特殊符号(如User-Agent
),可以使用["name"]
如:
requestScope.["User-Agent"]
运算符
运算符类型 | 返回值 |
---|---|
算数运算符 | 运算结果 |
逻辑运算符 | Boolean |
关系运算符 | Boolean |
三元运算符 | 运算结果 |
empty
空值运算符,用以判断:
作用 | 语法 |
---|---|
对象是否为null | ${ empty user } |
字符串是否不为"" | ${ not empty "张三" } |
集合是否为0 | ${ empty list } |
JSTL
JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
JSTL有Core、I18N、SQL、XML、Functions五个标签库,但现在只使用Core库。
使用方式
- 导入jar包
-
jstl1.2.jar
或jstl1.12.jar
+standard.jar
- 引入
使用jsp指令taglib
语法:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
prefix为标签前缀
-
测试
<c:out value = "Hello world!"></c:out>
Core标签库
if标签
语法:
<c:if test="判断体">
如果判断题的结果为true
</c:if>
注意:判断体最好在el表达式中书写,如 ${ count == 1}
,不要写成:${count } == 1
<%
request.setAttribute("count", 10);
%>
<!-- jstl标签经常会和el配合使用 -->
<!-- test代表返回boolean的表达式条件(true OR false) -->
<c:if test="${count == 10 }">
count == 10 <br>
</c:if>
forEach标签
语法: 普通for
<C:forEach begin="begin" end="end" [step="step"] items="collection" [var="varName"];>
body conent
</C:forEach>
语法:增强for
<c:forEach items="collection" var="var">
body content
</c:forEach>
代码
<%
// ==========================================
List<String> list1 = new ArrayList<String>();
list1.add("张角");
list1.add("张宝");
list1.add("张梁");
request.setAttribute("listString", list1);
// ==========================================
User user1 = new User();
User user2 = new User();
user1.setId(1);
user1.setName("吕布");
user1.setPassword("chitu");
user2.setId(2);
user2.setName("貂蝉");
user2.setPassword("biyuxiuhua");
List<User> list2 = new ArrayList<User>();
list2.add(user1);
list2.add(user2);
request.setAttribute("listUser", list2);
// ==========================================
Map<String, String> map1 = new HashMap<String, String>();
map1.put("张飞", "丈八蛇矛");
map1.put("关羽", "青龙偃月刀");
request.setAttribute("mapString", map1);
// ==========================================
Map<String, User> map2 = new HashMap<String, User>();
map2.put("第一猛男", user1);
map2.put("第一美女", user2);
request.setAttribute("mapUser", map2);
%>
<!-- 遍历List<String> -->
<h1>遍历List<String></h1>
<c:forEach items="${ listString }" var="s">
${s }
</c:forEach>
<br>
<!-- 遍历List<User> -->
<h1>遍历List<User></h1>
<c:forEach items="${ listUser }" var = "s">
${ s.id }
${ s.name }
${ s.password }
<br>
</c:forEach>
<!-- 遍历Map<String, String> -->
<h1>遍历Map<String, String></h1>
<c:forEach items="${mapString }" var="entry">
${ entry.key } : ${ entry.value } <br>
</c:forEach>
<!-- 遍历Map<String, User> -->
<h1>遍历Map<String, User></h1>
<c:forEach items="${mapUser }" var="entry">
${ entry.key } : ${ entry.value.id }---${entry.value.name }---${entry.value.password } <br>
</c:forEach>