EL 表达式 & JSTL 标签库(Java Web 学习笔记)

1.EL 表达式

a)什么是 EL 表达式,EL 表达式的作用?

EL 表达式的全称是:Expression Language。是表达式语言。
EL 表达式的什么作用:

EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。
因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。

<body>
<%
request.setAttribute("key","值");	
%>	
表达式脚本输出 key 的值是:
<%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%><br/> EL 表达式输出key 的值是:${key1}
</body>

EL 表达式的格式是:

${表达式}

EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串。

b)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>

c)EL 表达式输出 Bean 的普通属性,数组属性。List 集合属性,map 集合属性

i.需求——输出 Person 类中普通属性,数组属性。list 集合属性和 map 集合属性。

Person 类

在这里插入图片描述

输出的代码:

在这里插入图片描述

在这里插入图片描述

d)EL 表达式——运算

语法:

${  运算表达式 }  

EL 表达式支持如下运算符:

1)关系运算

在这里插入图片描述

2)逻辑运算

在这里插入图片描述

3)算数运算

在这里插入图片描述
在这里插入图片描述

4)empty 运算

empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。以下几种情况为空:
1、值为 null 值的时候,为空
2、值为空串的时候,为空
3、值是 Object 类型数组,长度为零的时候
4、list 集合,元素个数为零
5、map 集合,元素个数为零

在这里插入图片描述

5)三元运算

表达式 1?表达式 2:表达式 3
如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3 的值。

示例:

${ 12 != 12 ? "帅呆":"又骗人啦" }

6)“.”点运算 和 [] 中括号运算符

.点运算,可以输出 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>

e)EL 表达式的 11 个隐含对象

EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。

变量 类型 作用

pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象
pageScope Map<String,Object> 它可以获取 pageContext 域中的数据
requestScope Map<String,Object> 它可以获取 Request 域中的数据
sessionScope Map<String,Object> 它可以获取 Session 域中的数据
applicationScope Map<String,Object> 它可以获取 ServletContext 域中的数据
param Map<String,String> 它可以获取请求参数的值
paramValues Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用。
header Map<String,String> 它可以获取请求头的信息
headerValues Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam Map<String,String> 它可以获取在 web.xml 中配置的上下文参数

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 对象的使用

1.协议:
2.服务器 ip:
3.服务器端口:
4.获取工程路径:
5.获取请求方法:
6.获取客户端 ip 地址:
7.获取会话的 id 编号:

在这里插入图片描述
在这里插入图片描述

iii.EL 表达式其他隐含对象的使用

param		Map<String,String>		它可以获取请求参数的值
paramValues	Map<String,String[]>	它也可以获取请求参数的值,获取多个值的时候使用。 

示例代码:
在这里插入图片描述

请求地址:

http://localhost:8080/09_EL_JSTL/other_el_obj.jsp?username=wzg168&password=666666&hobby=java&hobby=cpp

header			Map<String,String>		它可以获取请求头的信息
headerValues	Map<String,String[]>	它可以获取请求头的信息,它可以获取多个值的情况

示例代码:
在这里插入图片描述

cookie	Map<String,Cookie>	它可以获取当前请求的 Cookie 信息

示例代码:
在这里插入图片描述

initParam	Map<String,String>	它可以获取在 web.xml 中配置的<context-param>上下文参数

web.xml 中的配置:
在这里插入图片描述

示例代码:
在这里插入图片描述

2、JSTL 标签库(次重点****)

a)什么是JSTL标签库

JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标签库。

b)JSTL标签库作用

EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面变得更佳简洁。

c)JSTL标签库

JSTL 由五个不同功能的标签库组成。

在这里插入图片描述

在jsp 标签库中使用taglib 指令引入标签库

CORE 标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> XML 标签库

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> FMT 标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> SQL 标签库
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> FUNCTIONS 标签库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

d) JSTL 标签库的使用步骤

1、先导入 jstl 标签库的 jar 包。taglibs-standard-impl-1.2.1.jar taglibs-standard-spec-1.2.1.jar
2、第二步,使用 taglib 指令引入标签库。
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

e) core 核心库使用

i.<c:set />(使用很少)

作用:

set 标签可以往域中保存数据

在这里插入图片描述

ii.<c:if />

if 标签用来做 if 判断。

在这里插入图片描述

iii.<c:choose> <c:when> <c:otherwise>标签

作用:

多路判断。跟 switch … case default 非常接近

在这里插入图片描述
在这里插入图片描述

iv. /<c:forEach //>

作用:

遍历输出使用。

1.遍历 1 到 10,输出

示例代码:
在这里插入图片描述

2.遍历Object 数组

示例代码:
在这里插入图片描述

3.遍历Map 集合

示例代码:

<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("key1", "value1");	
map.put("key2", "value2");	
map.put("key3", "value3");	
//	for ( Map.Entry<String,Object> entry : map.entrySet()) {
//	}	
	request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="entry">
<h1>${entry.key} = ${entry.value}</h1>
</c:forEach>

4.遍历List 集合—list 中存放 Student 类,有属性:编号,用户名,密码,年龄, 电话信息
Student 类:
在这里插入图片描述

示例代码:

<%--4.遍历List 集合---list 中存放 Student 类,有属性:编号,用户名,密码,年龄,电话信息--%>

<% 
List<Student> studentList = new ArrayList<Student>(); 
for (int i = 1; i <= 10; i++) { 
studentList.add(new Student(i,"username"+i ,"pass"+i,18+i,"phone"+i)); 
}
request.setAttribute("stus", studentList); 
%>

<table>
<tr>
<th>编号</th>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
<th>电话</th>
<th>操作</th>
</tr>
<%--
items 表示遍历的集合
var  表 示 遍 历 到 的 数 据begin  表示遍历的开始索引值end 表示结束的索引值
step 属性表示遍历的步长值
varStatus 属性表示当前遍历到的数据的状态
for(int i = 1; i < 10; i+=2)
--%>
<tr>
<td>${stu.id}</td>
<td>${stu.username}</td>
<td>${stu.password}</td>
<td>${stu.age}</td>
<td>${stu.phone}</td>
<td>${status.step}</td>
</tr>
</c:forEach>
</table>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值