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 循环遍历
  1. 基本for循环
<!--循环显示的1~9-->
<c:forEach begin="1" end="9" var="i">
		${i}
</c:forEach>
  1. 增强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实现

JSTL常用标签 待完善…