EL简介
1.EL是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
2.EL表达式用于代替JSP表达式(<%= %>)在页面中做输出操作。
3.EL表达式仅仅用来读取数据,而不能对数据进行修改。
4.使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。
EL写法格式
${表达式 }
EL使用
1 .取出4个域对象中存放的值。
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
一般JSP取值<br>
<%= pageContext.getAttribute("name")%>
<%= request.getAttribute("name")%>
<%= session.getAttribute("name")%>
<%= application.getAttribute("name")%>
使用EL表达式取出作用域中的值<br>
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
扩展1:EL表达式中在指定域中获取属性
指定从哪个域中获取:
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
扩展2:EL表达式中直接使用属性名获取属性
${name }
将会在四个域中由小到大(page,request,session,application )依次查找,为null则什么也不输出
获取域中的对象也是这样使用,如获取域中名字为user的对象
${user}
2.取数组
<%
String [] name = {"aa","bb","cc"};
pageContext.setAttribute("array", name );
%>
使用EL表达式取出作用域中数组的值<br>
${array[0] } , ${array[1] },${array[2] }
3.获取Map中属性时可以以直接通过属性的key
<%
Map map = new HashMap();
map.put("name", "Coder_z");
map.put("address","赣州");
map.put("address.aa","含特殊的key,注意取属性写法");
pageContext.setAttribute("map", map);
%>
使用EL表达式取出作用域中Map的值<br>
${map.name } , ${map.address } , ${map["address.aa"] }
4.获取对象的属性值可以直接通过“对象.属性名”
注:这里的属性名是get和set方法对应的属性值,并不是对象中的变量名。
比如:如果获取name属性值,那么该对象中必定要存在一个getName()方法。
<%
User user = new User("Coder_z",18);
session.setAttribute("u", user);
%>
${ u.name } , ${ u.age }
获取对象的属性也可以通过 对象[“属性名”]
u["name "]
EL的11个隐含对象(内置对象)
- pageContext :pageContext和JSP中的pageContext功能一样
请求域
- pageScope
- requestScope
- sessionScope
- applicationScope
头信息相关对象
- header
- headerValues
参数信息相关对象
- param
- paramValues
- cookie
扩展:
param与paramValues主要用于获取get或post请求中的参数
param
获取指定的请求参数 ${param.name}
paramValues
获取请求参数数组 ${paramValues.sport[1]}
全局初始化参数
- initParam
JSTL简介( jsp标准标签库)
EL表达式只具有输出功能,而不能做逻辑判断,像JSP页面中的JSP脚本片段<% %>,可以使用JSTL代替,JSTL一般与EL表达式配合使用。
JSTL使用
1.导包
2.在JSP页面中通过taglib标签引入标签库。
注:支持 EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:用来指定前缀名,我们通过该名来使用JSTL
uri:相当于库的唯一标识,因为JSTL由多个不同的库组成,使用该属性指定要导入哪个库。
3.使用JSTL
<c:out value="hello jstl"></c:out>
调用前缀为c的标签的out方法,向页面中输出value属性中的字符串。
JSTL常用标签(部分核心标签)
- c:set 添加或修改域中的属性
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 声明一个对象name, 对象的值 Coder ,scope="application"指定存储到application (默认存储到Page) -->
<c:set var="name" value="Coder" scope="application"></c:set>
使用EL表达式输出:
${applicationScope.name }
</body>
</html>
- c:forEach 对多个对象的集合进行迭代,重复执行标签体
<table class="table table-hover" class="table table-bordered">
<tr>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>操作</td>
</tr>
<!-- items : 表示遍历哪一个对象(案例中为一个集合),用EL表达式。
var: 设置遍历出来的对象的名称-->
<c:forEach items="${allStudent}" var="student">
<tr>
<td>${student.id}</td>
<td>${student.name}</td>
<td>${student.age}</td>
<td>${student.sex}</td>
<td> <a href="#">编辑</a> <a href="#">删除</a> </td>
</tr>
</c:forEach>
</table>