目录
目录
一 EL和JSTL的作用
- 去掉jsp文件中的jav代码
二 EL表达式和JSTL间的关系
- 通过EL获取到数据之后交给JSTL处理,处理完之后,再将数据交给EL显示
二 EL表达式的作用
基础:EL表达式的取值范围
默认取值范围,是为了让开发者不用经常写范围,是为了简化EL表达式
1)默认取值范围
EL默认从如下四个对象(JSP中的部分隐含对象)中依次取值
- page
- request
- session
- application
2)指定取值范围
- 指定在request中取值:requestScope.stu.name
- 指定在session中取值:sessionScope.stu.name
- 指定在page中取值:pageScope.stu.name
- 制定在applicatio中取值:application.stu.name
2.1 访问Bean的属性
通过EL表达式访问属性都是通过bea属性来访问
2.1.1 bean属性了解
- 和get/set对象的属性叫bean属性
- 通过get/set反应出来的我们以为的属性叫bean属性
- 去掉get并将首字母小写的属性是bean属性
- Bean属性通常都和对象属性一致,也可以修改为不一致
2.1.2 案例
<!-- 等价于request.getAttribute("stu").getName() -->
<p>姓名:${stu.name}</p>
<!-- 等价于request.getAttribute("stu").getAge() -->
<p>年龄:${stu["age"]}</p>
<!-- 等价于request.getAttribute("stu").getCourse().getId()
id的i不要大写 -->
<p>课程Id:${stu.course.id}</p>
2.2 输出简单的运算效果
基本上基本运算都支持,也使用了empty来进行判空运算
<!-- 2. 支持运算 -->
<p>年龄+5${stu.age+5}</p>
<p>判断年龄是否在20~30之间:${stu.age>20 && stu.age<30}</p>
<p>判断student是否为空:${empty stu}</p>
2.3 获取请求的参数值
${param.username}
等价于
request.getParameter("username");
${param.city}
等价于
request.getParameterValues("city");
案例
<!-- 3. 获取参数 -->
<p>获取请求参数:${param.user}</p>
三 JSTL介绍及使用
3.1 JSTL介绍
JSTL全称是JSP Standard Tag Library,即JSP标准标签库.是sun公司定义的一套标准,由Appache组织基于这套标准开发的一套标签库后又转给sun公司,被称为JSTL,成为了Javaee5.0的核心
3.2 JSTL使用
- 使用maven导入jar包
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
-
在jsp文件中导入要使用的标签库
-
在JSP文件中导入标签库
<%@page pageEncoding="utf-8"%>
<!--
uri为在maven依赖库中uri标签对应的值(12行)
prefix为在maven依赖库中short-name标签对应的值(11行)
-->
<%@taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
3.2.1 常用标签
if标签
<!-- 1. if标签 -->
<p>
<!-- 在test中写条件,但是if语句没有else -->
<c:if test="${stu.sex == 'M'}">男</c:if>
<c:if test="${stu.sex == 'F'}">女</c:if>
</p>
choose标签
<c:choose>
<!-- 相当于if -->
<c:when test="${stu.sex == 'M'}">男</c:when>
<!-- 相当于esle if -->
<c:when test="${stu.sex == 'F'}">女</c:when>
<!-- 相当于else -->
<c:otherwise>不男不女</c:otherwise>
</c:choose>
forEach标签
<h2>3. forEach标签</h2>
<!--
items:声明遍历的数据
var:给每次循环所获得的数据命名
-->
<p>
<c:forEach items="${stu.intrests}" var="intrest">
${intrest }
</c:forEach>
</p>
结果展示:
3.3 JSTL运行原理
- 请求经由servlet转发至jsp后,遇到了遇到使用jstl标签,根据jsp文件引用的jsp标准标签库引用的语句,之后再由引用哪一个标签,找到标签库中的对应的标签解析语句,调用其中的doTag()方法,翻译成对应的java代码.