一、EL表达式
1、EL主要作用
- EL 全名为Expression Language
1.1、获取数据
- EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访javabean的属性、访问list集合、访问map集合、访问数组)
- 使用EL表达式获取数据的语法:“${标识符}”
- EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据
${变量}
${name}
//获取对象的属性值
${对象名.属性名}
${user.name}
//获取集合元素
${对象名.size()}
${对象名[索引]}
${map集合对象名["key"]}//获取到map集合中的key所对应的value
- EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)
1.2、执行运算
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。
<!--算数运算-->
${ + - * / % }
/:用div可代替
<!--逻辑运算符-->
&&(and)||(or)||!(not)
<!--关系运算符-->
<!-->(gt) /<(lt) />=(ge) /<=(le) /!=(ne) /==(eq)-->
<!--empty运算符-->
empty:代表判断元素是否为null或者是是否包含元素
not empty:代表代表判断元素是否不为null或者是是否不包含元素
1.3、获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttpXHzmm-1660698402220)(…/assets/image-20220816220352771.png)]
- 作用域的访问对象
正常情况下,在使用EL表达式时,需要在表达式 中添加对应的作用域,例如 ${sessionScope.xxx},如果我没有书写作用域访 问对象,此时,EL表达式就会从page向requet 中查询,如果request没有对应的值就会找到 session查询,session如果范围内也没有,就会 最后找到application,如果几个作用域都不包含 要查找的值或对象,就会返回null状态。此时如 果我们调用某个对象的某个属性或方法,此时EL 表达式如果没有找到对象就会直接输出空白。
- 参数访问对象
- param相当于是在页面中调用了
- request.getParameter(“”)来获取参数中的内容。
- paramValues相当于在页面中调用了
- request.getParameterValues(“”)来获取同名对 象的多个值,返回一个数组类型
- JSP隐式对象
可以通过pageContext对象获取到该对象中的某 个值,同时还可以获取到页面中衍生出的各类内 置对象,例如可以通过 pageContext.request.contextPath获取到当前 项目的上下文路径。
<body>
<%--
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器 ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式( GET 或 POST )
request.getRemoteHost() 获取客户端的 ip 地址
session.getId() 获取会话的唯一标识
--%>
<%
pageContext.setAttribute("req", request);
%>
<%=request.getScheme() %> <br>1.协议: ${ req.scheme }<br>
2.服务器 ip:${ pageContext.request.serverName }<br>
3.服务器端口:${ pageContext.request.serverPort }<br>
4.获取工程路径:${ pageContext.request.contextPath }<br>
5.获取请求方法:${ pageContext.request.method }<br>
6.获取客户端 ip 地址:${ pageContext.request.remoteHost }<br>
7.获取会话的 id 编号:${ pageContext.session.id }<br>
</body>
1.4、调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
二、JSTL核心
2.1、标准库导入
- pow.xml导入三方依赖库
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
- 导入页面
格式化库
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/f
mt" %>
核心库
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/c
ore" %>
2.2、基本函数使用
2.2.1、通用标签
2.2.1.1、set
- 设置变量
<c:set var="变量名" value="值" scope="request|session|application"/> *默认情况是page。
<c:set var="num" value="100" />
将一个对象中的属性进行修改
target:代表要修改的对象
property:要修改的对象中的属性
value:要修改的属性值
- 修改变量值
<c:set target="${userInfo}"property="username"value="zhangsan" />
2.2.1.2、out
- 等价于<%==%>
<c:out value="${num}" />
<c:out value="要输出的内容" default="没有找到对应的变量,就会采用default作为值输出"/>
2.2.1.3、remove
- 删除属性
<c:remove var="变量" />
<!--删除后下文中不能使用-->
2.2.2、选择标签
2.2.2.1、if
- if表达式是没有else的相关操作的
<c:if test="条件表达式"></c:if>
2.2.2.3、choose
- 相当于switch
<choose>
<c:when test="条件表达式">
//满足条件
</c:when>
...
<c:otherwise>
//多个条件都不满足,就会执行该段
语句
</c:otherwise>
</choose>
2.2.3、循环标签
2.2.3.1、forEach
<c:forEach var="循环时的变量"items="集合|数组" begin="起始值"end="结束值" step="迭代步长"varStatus="循环属性变量" var="变量">
//循环体
</c:forEach>
2.3.格式化
2.3.1、数字格式化
<fmt:formatNumber value="12.34" pattern="#0.00" /> 12.34
保留小数点后两位数
2.3.2、日期格式化
<fmt:formatDate value="${templateUnit.creTime}" pattern="yyyy-MM-dd"/>