EL表达式和JSTL标签
为什么使用EL表达式
写法比jsp简单,替代jsp页面中的复杂代码
使用简单 相比较在jsp页面中嵌入java代码,EL应用更加简单
<%
request.setAttribute("jim","jim");
%>
<%
out.print(request.getAttribute("jim"));/*使用java代码对页面的输出*/
%>
${jim}<br><%--使用EL表达式对页面的输出 在jim值为null时,不进行输出--%>
什么是El表达式
EL即Expression Language(表达式语言) 简称EL.
是jsp2.0中引入的一个新内容.
通过EL表达式可以简化在JSP开发中对对象的引用,从而规范页面代码,增强程序的可读性及维护性.
EL表达式语法
El语法
以“${”作为开始
以“}”作为结束
**直接使用变量名获取值
∗
∗
例
:
** 例:
∗∗例:{ username }
El的特点
自动转化类型
EL得到某个数据时可以自动转化类型 对于类型的限制更加宽松
操作符
主要有算术运算符,比较运算符,逻辑运算符,验证运算符empty与条件运算符,
.运算符
算术运算符
运算符 | 功能 | |
---|---|---|
+ | 执行加法功能(没有字符串连接,代码执行会报错) | |
- | 减法 | |
* | 乘法 | |
% | 取模 |
比较运算符
运算符 | 功能 |
---|---|
==或eq | 判断符号两边是否相等,相等则返回true,否则返回false |
!=或ne | 判断符号两边是否不相等,相等则返回true,否则返回false |
<或lt | 判断符号左边是否小于右边,如果小于则返回true,否则返回false |
>或gt | 判断符号左边是否大于右边,如果小于则返回true,否则返回false |
<=或le | 判断符号左边是否小于或等于右边,如果小于或等于则返回true,否则返回false |
>=或ge | 判断符号左边是否大于等于右边,如果大于或等于则返回true,否则返回false |
逻辑运算符
运算符 | 功能 |
---|---|
&&或and(短路与) | ${false && false} 或者 ${false and false } |
||或or(短路或) | ${true || false} 或者 ${true or false } |
!或not(逻辑非) | ! t r u e ( 相 当 于 {!true}(相当于 !true(相当于{false}) 或者 ${not true } |
"."运算符
作用获取对象的属性
<%
User user = new User("jim",19);
request.setAttribute("user",user);//将user对象添加到请求对象中
%>
${user.name}<%--向页面输出name值--%>
EL隐世对象
对象名称 | 说明 |
---|---|
pageScope | 返回页面范围的变量名 |
requestScope | 返回请求范围的变量名 |
sessionScope | 返回会话范围的变量名 |
applicationScore | 返回应用范围的变量名 |
<%--
Created by IntelliJ IDEA.
User: 小刘同学
Date: 2021/04/08
Time: 16:12
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<%
pageContext.setAttribute("num","page");
request.setAttribute("num","request");
session.setAttribute("num","session");
application.setAttribute("num","application");
%>
<body>
${num}<%--如果setAttribute中对的name值一样,使用name值获取的是pageContext--%>
${applicationScope.num}
${sessionScope.num}
${requestScope.num}
</body>
</html>
什么是JSTL
jstl是jsp标准标签库使用JSTL实现jsp页面中逻辑处理
JSTL环境搭建
导入标签库中的jar文件
在jsp页面中添加taglib指令
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
使用jstl标签
JSTL核心标签
迭代标签:foreach forTokens
条件标签:if
foreach标签
item:指定要遍历的集合(可以是集合,数组)对象
var:指定集合内数据变量的名称
begin:指定从集合的第几位开始
end:指定迭代到集合的第几位结束
<%@ page import="com.lsy.login.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%--
Created by IntelliJ IDEA.
User: 小刘同学
Date: 2021/04/01
Time: 20:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<%
List<User> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User("admin"+i,i);
list.add(user);
}
request.setAttribute("list",list);
%>
<body>
<table border="1" width="400">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
<td>操作</td>
</tr>
<c:forEach items="${list}" var="user" varStatus="s">
<tr>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td><a href="">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
forTokens标签
item:指定需要迭代的字符串
delims表示分隔符
var表示使用分隔符分割item产生的字符串
<%
String str="a1b1c1s1ff1g1";
request.setAttribute("str",str);
%>
<c:forTokens items="${str}" delims="1" var="s">
${s}
</c:forTokens>
if标签
if标签用于判断条件是否成立,与java中的if语句作用一样
test:判断条件表达式
var:用于保存返回的true或false
scope:指定var变量的作用域
<c:if test="${num1==10}" var="res" scope="request">
<h1>成立</h1>
</c:if>