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 "]
  5.进行数据运算
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的标签本身不具备从域里取数据的能力,也不具备数据运算的能力。必须要配合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 循环遍历
 
- 基本for循环
 
<!--循环显示的1~9-->
<c:forEach begin="1" end="9" var="i">
		${i}
</c:forEach>
  - 增强for循环
 
  <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>
  - c:if 判断
 
//语法:
<c:if test="EL表达式进行判断">
    如果判断为true,这里的代码会执行
</c:if>
//注:与java语法不同,没有else,需使用两个或多个c:if实现
  
京公网安备 11010502036488号