EL(表达式语言)
表达式语言(Expression Language,EL)是JSP2.0中新增的功能。使用表达式语言,可以方便地访问标志位(page,request,session和application标志位)中的属性内容,可以避免出现许多的Scriptlet代码。语法如下:
${属性名称}
注:Scriptlet:在JSP中,Scriptlet被称为脚本小程序,所有嵌入在HTML代码中的Java程序都必须使用Scriptlet标记起来。一共有三种:
第一种:<% %> 第二种:<%!%> 第三种:<%= %>
EL表达式可以方便得访问对象中的属性、提交的参数或者是进行各种数学运算,EL表达式最大的特点是如果输出内容为null,则会自动使用空字符串(“”)表示。EL表达式语言可以输出4种范围中的内容,如在不同的属性范围中设置了同一个属性名称,则将按照如下顺序查找:
page --> request --> session --> application
<% pageContext.setAttribute(“info”,”page范围属性”); request.setAttribute(“info”,” request范围属性”); session.setAttribute(“info”,” session范围属性”); application.setAttribute(“info”,” application范围属性”);%>${info}
以上代码的运行结果是:page范围属性。
当然要指定一个要取出属性的范围,可以添加标记
属性范围 | 范例 | 说明 |
page | ${pageScpe.属性} | 取出page范围的属性内容 |
request | ${requestScpe.属性} | 取出request范围的属性内容 |
session | ${sessionScpe.属性} | 取出session范围的属性内容 |
application | ${applicationScpe.属性} | 取出application范围的属性内容 |
接受请求参数
使用表达式语言可以显示接收的请求参数,功能和request.getParameter()类似,语法如下:
接收一个参数 ${param.参数名}
接收一组参数 ${paramValues.参数名称}
接收到一组参数,如果想要取出,需要分别指定下标。
对集合的操作(Collection、Map集合中的内容)将集合保存在request范围中,使用EL表达式输出时,直接通过集合的下标即可访问。
<% ???List list = new Arraylist(); ???list.add(“a”); ???list.add(“b”); ???list.add(“c”); ???request.setAttribute(“list”,list);%>第一个元素:${list[0]}第二个元素:${list[1]}第三个元素:${list[2]}
以上代码的运行结果是:
第一个元素:a
第二个元素:b
第三个元素:c
运算符
算术运算符 | 描述 | 范例 | 结果 |
+ | 加法 | ${4+6} | 10 |
- | 减法 | ${4-6} | -2 |
* | 乘法 | ${4*6} | 24 |
/或div | 除法 | ${4/6} 或 ${4 div 6} | 0.666 |
%或mod | 取模(余数) | ${4%6} 或 ${4 mod 6} | 4 |
特别注意
“+”在EL中只代表加法,不表示连接;
${a+”20”} ???//20${a+”20a”} //异常${10/0} ?//Infinity${“abc” < “b”} //true 比较的是位置的字符Unicode码${empty ulist} //返回的是boolean,即ulist是否为空。
JSTL(JSP标准标签库)
JSP标准标签库
使用标签库可以避免过多的Scriptlet代码,但是采用自定义的标签库的做法,非常繁琐且不通用,所以可以借助一些开源工具使用一些公共的标签来完成代码的开发。JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开放源代码的标签组件。核心标签库是JSTL中最重要的部分,也是在开发中最常用的部分,在核心标签库中主要完成的就是流程控制、迭代输出等操作。
核心标签库中的主要标签
功能分类 | 标签名称 | 描述 |
基本标签 | <c:out> | 输出属性内容 |
<c:set> | 设置属性内容 | |
<c:remove> | 删除指定属性 | |
<c:catch> | 异常处理 | |
流程控制 | <c:if> | 条件判断 |
<c:choose> | 多条件判断,可设置<c:when>和<c:otherwise>标签 | |
迭代标签 | <c:forEach> | 输出数组,集合 |
<c:forTokens> | 字符串拆分及输出操作 | |
包含标签 | <c:import> | 将指定的路径包含到当前页 |
生成URL标签 | <c:url> | 根据路径和参数生成一个新URL |
客户端跳转 | <c:redirect> | 客户端跳转 |
使用核心标签库之前,必须在JSP页面中引入标签库配置文件。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<c:if>标签
语法:
<c:if test=”判断条件” var=”存储判断结果”></c:if>
例子
<c:if test=”${username != null}”> ???????欢迎,${username}</c:if>
<c:choose>标签
<c:if>的功能只是针对一个条件的判断,如果要判断多个条件,可以使用<c:choose>标签,<c:choose>只能作为<c:when>和<c:otherwise>的父标签出现,不能单独使用。
例子:
<%
request.setAttribute(“num”,12);
%><c:choose> ???<c:when test=”${num == 10}”> ???????num属性的值为10 ???</c:when> <c:when test=”${num == 20}”> ???????num属性的值为20 ???</c:when> ???<c:otherwise> ???????没有一个条件满足 ???</c:otherwise></c:choose>
以上代码输出结果为:没有一个条件满足
<c:otherwise>标签是当所有的<c:when>都不满足时执行的,所以编写时一定要放在所有<c:when>标签的最后。
<c:forEach>标签
<c:forEach>标签的主要功能为循环控制,可以将集合中的成员进行迭代输出,功能与Iterator接口类似。
<c:forEach [var=”每一个对象的属性名称”] items=”集合” [varStatus=”存放当前对象的成员信息”] [begin=”集合的开始输出位置”] [end=”集合的结束输出位置”] [step=”每次增长的步长]>
标签体
</c:forEach>
例子:
<% ???String info[] = {“a”, “b”, “c”, “d”, “e”, “f”, “g”}; ???request.setAttribute(“info”,info);%> ???例一:<c:forEach var =”s” items=”${info}” > ???${s}、</c:forEach>例二:<c:forEach var =”s” items=”${info}” step=”2”> ???${s}、</c:forEach>例三:<c:forEach var =”s” items=”${info}” begin=”1” end=”2”> ???${s}、</c:forEach>
以上代码输出结果为:
例一:a、b、c、d、e、f、h、
例二:a、c、e、h、
例三:b、c、
使用<c:forEach>输出时,不仅可以输出List,也可以输出Set,即只要是Collection接口的子接口或类都可以输出。<c:forEach>也可以输出Map集合,但是Map集合中的元素都是按照键值对来存储的,要想得到key和value,则需要通过元素提供的getKey()和getValue()方法。
例子:
<% ???Map m = new HaspMap(); ???m.put(“1”,”first”); ???m.put(“2”,”second”); ???request.setAttribute(“m”,m);%> ???<c:forEach var =”s” items=”${m}” > ???${m.key} --> ${m.value}</c:forEach>
以上代码输出结果为:
1 --> first
2 --> second
EL和JSTL
原文地址:https://www.cnblogs.com/ghq120/p/8168852.html