EL注意事项:EL表达式,全称是expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
基本语法:
- 没有空指针异常
- 没有索引越界异常
- 没有字符串凭拼接效果
- EL表达式除了能在四大域中获取数据,同时它可以访问其他隐式对象,并且访问对象有返回值的方法
EL表达式的语法格式:${表达式内容}
| Java代码块 | JSP表达式 | EL表达式 |
|---|---|---|
| <% String message = (String)request.getAttribute("message"); out.write(message); %> | <%=request.getAttribute("message")%> | ${message} |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--向域对象添加数据--%>
<% request.setAttribute("username", "itzhuzhu");%>
<%--三种方式获取数据--%>
Java代码块获取 <%out.println(request.getAttribute("username"));%>
JSP表达式获取 <%=request.getAttribute("username")%>
EL表达式:${username}
通过上面我们可以看出,都可以从请求域中获取数据,但是EL表达式写起来是最简单的方式。这也是以后我们在实际开发中,当使用JSP作为视图时,绝大多数都会采用的方式。
EL获取数据类型:%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%--获取基本数据类型--%>
<% pageContext.setAttribute("num", 23);%>
基本数据类型:${num}
<%--获取自定义对象类型--%>
<%
Student2 student = new Student2("itzhuzhu", 23);
pageContext.setAttribute("student", student);
%>
自定义对象:${student}
${student.username}
${student.age}
<%--获取数组类型--%>
<%
String[] arr = {"呵呵", "哈哈", "呵呵"};
pageContext.setAttribute("arr", arr);
%>
数组:${arr}
<%--获取集合--%>
<%
ArrayList list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
%>
List集合:${list}
${list[0]}
<%
HashMap hashMap = new HashMap<>();
hashMap.put("a", new Student2("韩信", 11));
hashMap.put("a", new Student2("李白", 12));
pageContext.setAttribute("hashMap", hashMap);
%>%
Map集合:${hashMap}
<%--获取四大域对象中的数据--%>
<%
pageContext.setAttribute("username", "itzhuzhu");
request.setAttribute("username", "itzhuzhu");
session.setAttribute("username", "itzhuzhu");
application.setAttribute("username", "itzhuzhu");
%>
EL运算符:
其他的和java一样
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<%
String s = null;
String s2 = "";
int[] arr = {};
%>
${empty s}
${empty s2}
${empty arr}
三元运算符
<%
pageContext.setAttribute("gender", "girl");
%>
男
>女
隐式对象介绍:
EL表达式提供的隐式对象,可以不声明直接来使用,它和JSP的隐式对象不是一回事:
| EL中的隐式对象 | 类型 | 对应JSP隐式对象 | 备注 |
|---|---|---|---|
| PageContext | Javax.serlvet.jsp.PageContext | PageContext | 完全一样 |
| ApplicationScope | Java.util.Map | 没有 | 应用层范围 |
| SessionScope | Java.util.Map | 没有 | 会话范围 |
| RequestScope | Java.util.Map | 没有 | 请求范围 |
| PageScope | Java.util.Map | 没有 | 页面层范围 |
| Header | Java.util.Map | 没有 | 请求消息头key,值是value(一个) |
| HeaderValues | Java.util.Map | 没有 | 请求消息头key,值是数组(一个头多个值) |
| Param | Java.util.Map | 没有 | 请求参数key,值是value(一个) |
| ParamValues | Java.util.Map | 没有 | 请求参数key,值是数组(一个名称多个值) |
| InitParam | Java.util.Map | 没有 | 全局参数,key是参数名称,value是参数值 |
| cookie | Java.util.Map | 没有 | Key是cookie的名称,value是cookie对象 |
JSTL的全称是:JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。
作用:
JSTL的组成:给开发人员提供通用的标签库,取代JSP页面上的代码,提高代码可读性,降低维护性
| 组成 | 作用 | 说明 |
|---|---|---|
| Core | 核心标签库。 | 通用逻辑处理 |
| Fmt | 国际化有关。 | 需要不同地域显示不同语言时使用 |
| Functions | EL函数 | EL表达式可以使用的方法 |
| SQL | 操作数据库。 | 不用 |
| XML | 操作XML。 | 不用 |
要想使用JSTL标签库,需要添加jar包。
核心标签库
| 标签名称 | 功能分类 | 分类 | 作用 |
|---|---|---|---|
| 流程控制 | 核心标签库 | 用于判断 | |
| 流程控制 | 核心标签库 | 用于多个条件判断 | |
| 迭代操作 | 核心标签库 | 用于循环遍历 |
演示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--导入jstl标签库 --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSTL的常用标签
<%-- c:if c:choose c:when c:otherwise --%>
<% pageContext.setAttribute("score","F"); %>
优秀
一般
AAA
BBB
CCC
DDD
其他
<%-- c:forEach 它是用来遍历集合的
属性:
items:要遍历的集合,它可以是EL表达式取出来的
var:把当前遍历的元素放入指定的page域中。 var的取值就是key,当前遍历的元素就是value
注意:它不能支持EL表达式,只能是字符串常量
begin:开始遍历的索引
end:结束遍历的索引
step:步长。i+=step
varStatus:它是一个计数器对象。里面有两个属性,一个是用于记录索引。一个是用于计数。
索引是从0开始。计数是从1开始
--%>
<% List list = new ArrayList();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
list.add("EEE");
list.add("FFF");
list.add("GGG");
list.add("HHH");
list.add("III");
list.add("JJJ");
list.add("KKK");
list.add("LLL");
pageContext.setAttribute("list",list);
%>
${s}
${num}
索引
序号
信息
${vs.index}
${vs.count}
${s}



