EL表达式
Expression Language 。是表达式语言
EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。比jsp表达式更加简洁
<body><%request.setAttribute("key","值");%>表达式脚本输出的key的值:<%=request.getAttribute("key")%><br/>EL表达式输出的:${key};</body>
注:EL表达式在输出空字符串时,输出的就是空;而jsp输出的是null
EL 表达式搜索域数据的顺序
EL 表达式主要是在 jsp 页面 中输出数据
主要是输出域对象中的数据
当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。
<body><%// 往四个域中都保存了相同的 key 的数据。request.setAttribute("key", "request");session.setAttribute("key", "session");application.setAttribute("key", "application");pageContext.setAttribute("key", "pageContext");%>${key};</body>
EL 表达式输出 Bean 的普通属性,数组属性。List 集 合属性,map 集合属性
//先在person类中添加set/get方法public class person {private String name;private String[] phones;private List<String> cities;private Map<String,Object> map;}<body><%person person = new person();person.setName("h");person.setPhones(new String[]{"12345", "12315", "112"});List<String> cities=new ArrayList<>();cities.add("北京");cities.add("上海");cities.add("深圳");person.setCities(cities);Map<String,Object> map=new HashMap<>();map.put("k1", "v1");map.put("k2", "v2");map.put("k3", "v3");person.setMap(map);pageContext.setAttribute("person", person);%>输出person:${person}<br/>输出person的name属性值:${person.name}输出 Person 的 cities 集合中的元素值:${p.cities} <br>输出 Person 的 List 集合中个别元素值:${p.cities[2]} <br>输出 Person 的 Map 集合: ${p.map} <br>输出 Person 的 Map 集合中某个 key 的值: ${p.map.key3} <br></body>
EL表达式—运算
${ 运算表达式 }
结果返回true/false
//关系运算${1==1} 或 ${1 eq 1}//逻辑运算${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 }//算术运算${1+1}
empty 运算
可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false
<body><%// 1、值为 null 值的时候,为空request.setAttribute("emptyNull", null);// 2、值为空串的时候,为空request.setAttribute("emptyStr", "");// 3、值是 Object 类型数组,长度为零的时候request.setAttribute("emptyArr", new Object[]{});// 4、list 集合,元素个数为零List<String> list = new ArrayList<>();// list.add("abc");request.setAttribute("emptyList", list);// 5、map 集合,元素个数为零Map<String,Object> map = new HashMap<String, Object>();// map.put("key1", "value1");request.setAttribute("emptyMap", map);%>${ empty emptyNull } <br/>${ empty emptyStr } <br/>${ empty emptyArr } <br/>${ empty emptyList } <br/>${ empty emptyMap } <br/></body>
. 点运算 和 [] 中括号运算符
.点运算,可以输出 Bean 对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。 并且[]中括号运算,还可以输出 map 集合中key 里含有特殊字符的 key 的值
<body><%Map<String,Object> map = new HashMap<String, Object>();map.put("a.a.a", "aaaValue");map.put("b+b+b", "bbbValue");map.put("c-c-c", "cccValue");request.setAttribute("map", map);%>${ map['a.a.a'] } <br> //包含特殊字符 用中括号输出${ map["b+b+b"] } <br>${ map['c-c-c'] } <br></body>
EL 表达式的 11 个隐含对象
EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用
**
i. EL 获取四个特定域中的属性
pageScope pageContext 域
requestScope Request 域
sessionScope Session 域
applicationScope ServletContext 域
<body><%pageContext.setAttribute("key1", "pageContext1");pageContext.setAttribute("key2", "pageContext2");request.setAttribute("key2", "request");session.setAttribute("key2", "session");application.setAttribute("key2", "application");%>${ applicationScope.key2 }</body>
ii. pageContext 对象的使用
<body><%--request.getScheme() 它可以获取请求的协议request.getServerName() 获取请求的服务器 ip 或域名request.getServerPort() 获取请求的服务器端口号getContextPath() 获取当前工程路径request.getMethod() 获取请求的方式(GET 或 POST)request.getRemoteHost() 获取客户端的 ip 地址session.getId() 获取会话的唯一标识--%><%pageContext.setAttribute("req", request);%><%=request.getScheme() %> <br>//EL表达式语句· 方法是获取它的get方法取值1.协议: ${ req.scheme }<br>2.服务器 ip:${ pageContext.request.serverName }<br>3.服务器端口:${ pageContext.request.serverPort }<br>4.获取工程路径:${ pageContext.request.contextPath }<br>5.获取请求方法:${ pageContext.request.method }<br>6.获取客户端 ip 地址:${ pageContext.request.remoteHost }<br>7.获取会话的 id 编号:${ pageContext.session.id }<br></body>
iii. EL 表达式其他隐含对象的使用
<body>输出请求参数 username 的值:${ param.username } <br>输出请求参数 password 的值:${ param.password } <br>输出请求参数 hobby 的值:${ paramValues.hobby[0] } <br>输出请求参数 hobby 的值:${ paramValues.hobby[1] } <br>输出请求头[User-Agent]的值:${ header['User-Agent'] } <br>输出请求头[Connection]的值:${ header.Connection } <br>输出请求头[User-Agent]的值:${ headerValues['User-Agent'][0] } <br>获取 Cookie 的名称:${ cookie.JSESSIONID.name } <br>获取 Cookie 的值:${ cookie.JSESSIONID.value } <br>输出Context-paramusername 的值:${ initParam.username } <br>输出Context-paramurl 的值:${ initParam.url } <br></body>
JSTL 标签库
JSTL 标签库是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标签库。 <br /> EL 表达式主要是为了替换 jsp 中的表达式脚本,而**标签库则是为了替换代码脚本**。这样使得整个 jsp 页面 变得更佳简洁。
JSTL 由五个不同功能的标签库组成
| 功能范围 | URL | 前缀 |
|---|---|---|
| 核心标签库 | https://java.sun.com/jsp/jstl/core | c |
| 格式化 | https://java.sun.com/jsp/jstl/frmt | frmt |
| 函数 | https://java.sun.com/jsp/jstl/functions | fn |
| 数据库(不使用) | https://java.sun.com/jsp/jstl/sql | sql |
| XML(不使用) | https://java.sun.com/jsp/jstl/xml | x |
//导入依赖<dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version></dependency><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version></dependency>
core核心库使用
<body>//<c:set/>标签<%--set标签可以向域中保存数据--%>保存之前:${ sessionScope.abc } <br><c:set scope="session" var="abc" value="abcValue"/>保存之后:${ sessionScope.abc } <br>//<c:if/>标签 用来做if判断<c:if test="${1==1}"> //test属性表示判断条件(用EL表达式输出)<span>1=1</span></c:if>//<c:choose> <c:when> <c:otherwise>标签 多路判断<%request.setAttribute("height", 175);%><c:choose> //choose标签表示开始选择判断<c:when test="${ requestScope.height > 180 }"><h2>高</h2> //test属性表示当前这种情况的判断值</c:when> //when标签表示每一种判断情况<c:when test="${ requestScope.height > 170 }"><h2>还可以</h2></c:when><c:otherwise> //类似于switch语句的 default结尾<c:choose> //when标签的父标签必须是choose标签<c:when test="${requestScope.height > 160}"><h3>大于 160</h3></c:when><c:otherwise>其他小于 160</c:otherwise></c:choose></c:otherwise></c:choose>//forEach表示遍历<c:forEach begin="1" end="10" var="i">${i}</c:forEach> //遍历对象类型数组<%request.setAttribute("arr", new String[]{"A","B","C"});%><c:forEach items="${ requestScope.arr }" var="item">${ item } <br></c:forEach>//遍历map<%Map<String,Object> map = new HashMap<String, Object>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");request.setAttribute("map", map);%><c:forEach items="${ requestScope.map }" var="entry"><h1>${entry.key} = ${entry.value}</h1></c:forEach>//foreach标签属性item: 表示遍历的集合var 表示遍历的数据step 表示遍历的步长varstatus 表示当前遍历到的数据的状态<c:forEach begin="1" end="7" varStatus="sta">${sta.current}<br/>${sta.index}<br/>${sta.count}<br/></c:forEach></body>
