目录
- EL表达式(Expression Language)
- EL和JSP脚本的区别
- 语法
- EL操作符
- EL运算符
- 注意
- EL功能
- EL访问作用域
- 隐式对象
- 示例1:获得应用上下文
- 示例2:获取Cookie对象
- JSTL(JavaServerPages Standard Tag Library)
- JSTL使用步骤
- JSTL标签分类
- 使用
- 1.条件标签if判断
- 2.多条件choose判断
- 3.迭代foreach标签
- \<fmt:formatDate/>标签
- 其他
- 总结
EL表达式(Expression Language)
- EL使得JSP写起来更简单、简洁。主要用于获取作用域中的数据(如:request.getAttribute())
- 便于和html相结合
EL和JSP脚本的区别
- <%=request.getAttribute() %>没有找到返回null
- ${requestScope.name} 没找到返回" "
语法
${EL 表达式}
例如:${username}
EL操作符
- 操作符“.”
获取对象的属性,例如:${news.title}
- 操作符“[]”
获取对象的属性,例如:${news["title"]}
获取集合中的对象,例如:${newsList[0]}
EL运算符
运算符 | 说明 |
---|---|
( ) | 改变执行的优先级,例如${3*(4+5)} |
+,-,*,/,% | 算术运算符,例如${3+2} |
==,!=,>,>=,<,<= | 关系运算符,例如 a = = b 或 {a==b}或 a==b或{a eq b} |
&&,||,! | 逻辑运算符,例如${true&&false} |
?: | 条件运算符,例如${a>b?1:2} |
empty | 用于检测变量名是否为空,是否等于NULL,例如${empty name} |
关系运算符 | 范例 | 结果 |
---|---|---|
== 或 eq | ${5 == 5}或${5 eq 5} | true |
!= 或 ne | ${5 != 5}或${5 ne 5} | false |
< 或 lt | ${3 < 5}或${3 lt 5} | true |
> 或 gt | ${3 > 5}或${3 gt 5} | false |
<= 或 le | ${3 <= 5}或${3 le 5} | true |
>= 或 ge | ${3 >= 5}或${3 ge 5} | false |
注意
${param.password1} == ${param.password2}
——语法错误
${ ${param.password1 } == ${ param.password2 } }
——语法错误
${ param.password1 == param.password2 }
——语法正确
EL功能
- 取得JavaBean对象的属性
${news.title} - 取得数组、List、Map类型对象的元素
${list[0]} - 使用各类运算符对原始数据进行简单处理
${totalRecordCount/pageSize} - 屏蔽一些常见的异常
${username} - 能实现简单的自动类型转换
${news}相当于(News)request.getAttribute(“news”)
EL访问作用域
request.setAttribute("news", news);
//两种方式取数据:
//使用Java小脚本:
request.getAttribute("news");
//使用EL表达式:
${ news } 或者 ${ requestScope.news }
作用域 | Java代码取值 | EL取值 |
---|---|---|
请求作用域 | request.getAttribute(“news”); | ${ requestScope.news } |
会话作用域 | session.getAttribute(“username”); | ${ sessionScope.username } |
程序作用域 | application.getAttribute(“count”); | ${ applicationScope.count } |
页面作用域 | pageContext.getAttribute(“userNum”); | ${ pageScope.userNum } |
隐式对象
隐含对象 | 描述 |
---|---|
pageScope | page作用域 |
requestScope | request作用域 |
sessionScope | session作用域 |
applicationScope | application作用域 |
param | Request对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP信息头,字符串 |
headerValues | HTTP信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
pageContext | 当前页面的PageContext |
示例1:获得应用上下文
(获取路径以后用的很多,防止404)
<%String contextPath = request.getContextPath();%><%=contextPath%>
<%-- jsp写法--%><a href="<%=request.getContextPath()%>/manager/safe/xxServlet">点我</a>
<%--el的表达式写法--%><a href="${pageContext.request.contextPath}/manager/safe/xxServlet">点我</a>
示例2:获取Cookie对象
<%// 添加cookie Cookie cookie = new Cookie("username","xiaoming");response.addCookie(cookie);
%><br>
// 界面必须请求两次才能拿到 cookie 应为 我们获取的cookie是从request对象中获取的,第一次还没有没有 对应的username
${cookie.username.name}//获取名为username的cookie对象<br>
${cookie.username.value}//获取名为password的cookie对象
JSTL(JavaServerPages Standard Tag Library)
- JSP标准标签库
- 实现JSP页面中的逻辑控制
JSTL使用步骤
- 引入依赖
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-jstlel</artifactId><version>1.2.5</version></dependency>
- 在JSP页面中添加指令
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
JSTL标签分类
标签库名称 | 资源标示符(uri) | 前缀(prefix) |
---|---|---|
核心标签库 | http://java.sun.com/jsp/jstl/core | c |
国际化/格式化标签库 | http://java.sun.com/jsp/jstl/fmt | fmt |
XML标签库 | http://java.sun.com/jsp/jstl/xml | x |
数据库标签库 | http://java.sun.com/jsp/jstl/sql | sql |
函数标签库 | http://java.sun.com/jsp/jstl/functions | fn |
使用
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
1.条件标签if判断
语法:<c:if test =“条件”> < /c:if>
<!-- test属性中是条件,但是条件需要使用EL表达式来书写 --><h3>条件标签:if</h3><c:if test="${8>2 }">8大于2是成立的</c:if><c:if test="${8<2 }">8小于2是成立的</c:if>
2.多条件choose判断
语法:
<c:choose >
<c:when test=“条件1”>结果1< /c:when>
<c:when test=“条件2”>结果2< /c:when>
<c:when test=“条件3”>结果3< /c:when>
<c:otherwise >结果4< /c:otherwise>
< /c:choose>
<h3>条件标签:choose(等价于java中多重if)</h3>
<%-- 测试成绩等级 >90 优秀 >80 良好 >70 中等 >60及格--%>
<c:set var="score" value="80"></c:set>
<c:choose><c:when test="${score>=90 }">优秀</c:when><c:when test="${score>=80 }">良好</c:when><c:when test="${score>=70 }">中等</c:when><c:when test="${score>=60 }">及格</c:when><c:otherwise>不及格</c:otherwise>
</c:choose>
3.迭代foreach标签
语法:
<c:foreach var=“变量名” items=“集合” begin=“起始下标” end=“结束下标” step=“间隔长度” varstatus=“遍历状态”>< /c:foreach>
<h3>测试list集合遍历获取学生列表</h3><table border="1" width="80%" bordercolor="red" cellspacing="0"align="center"><tr><th>学号</th><th>姓名</th><th>成绩</th><th>班级</th><th>是否是第一个</th><th>是否是最后一个</th><th>计数count</th><th>索引index</th></tr><!-- varStatus:变量状态:遍历出的每一项内容的状态:first 是否是第一行last 是否是最后一行count 当前行数index 当前元素的下标--><!-- var :遍历出的每一项使用变量先存储items:集合(使用El表达式)--><c:forEach var="stu" items="${students}" varStatus="vs"><tr><td>${stu.id}</td><td>${stu.name}</td><td>${stu.score}</td><td>${stu.classes}</td><td>${vs.first}</td><td>${vs.last}</td><td>${vs.count}</td><td>${vs.index}</td></tr></c:forEach></table>
<fmt:formatDate/>标签
<fmt:formatDate/>格式化标签:实现格式化的日期和时间显示
<fmt:formatDate value="date" pattern="yyyy-MM-dd HH:mm:ss"/>
其他
<c:url/>超链接标签
<c:url value="url" />
<c:param/>参数标签
<c:param name="name" value="value"/>
<c:import/>导入标签
<c:import url="URL" />
总结
标签名称 | 作用 |
---|---|
<c:out /> | 输出文本内容到out对象,常用于显示特殊字符,显示默认值 |
<c:set/> | 在作用域中设置变量或对象属性的值 |
<c:remove/> | 在作用域中移除变量的值 |
<c:if/> | 实现条件判断结构 |
<c:forEach/> | 实现循环结构 |
<c:url/> | 构造url地址 |
<c:param/> | 在url后附加参数 |
<c:import/> | 在页面中嵌入另一个资源内容 |
fmt:formatDate/ | 格式化时间 |
fmt:formatNumber/ | 格式化数字 |