1.EL表达式
概述
- 概念:Expression Language,表达式语言
- 作用:替换和简化jsp页面中Java代码的编写
- 语法:$
- 使用:运算和获取值
EL表达式的忽略
jsp默认支持el表达式的,如果需要忽略el表达式,有两种方式
1. 设置page指令中isELIgnored属性的值为true,这个方式会忽略当前页面中的所有EL表达式
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="true" %>
2. \${表达式},忽略当前EL表达式
EL中的运算符
- 算术运算符:+,-,*,/(除法运算符还可以用div),%(取模运算符还可以用mod表示)
- 比较运算符
- 逻辑运算符:&&(and),||(or),!(not)
- 空运算符:empty,用于判断字符串,集合,数组对象是否为null,或者长度是否为0
${empty list}:判断list是否为null或者长度为0
${not empty list}判断list是否不为null并且长度大于0
<%
String str = "";
str = null;
%>
<%--长度为0的字符串:true--%>
<%--字符串的值为null:true--%>
${empty str}
EL表达式获取值
- EL表达式只能从域对象中获取值
- 语法1:${域名称.键名}:从指定域中获取指定键的值。
域名称对应四个域对象,有四个域名称:- pageScope--pageContext
- requestScope--request
- sessionScope--session
- applicationScope--application
<body>
<%
// 在域中存储数据
request.setAttribute("user","NrvCer");
%>
${requestScope.user} <%--将在页面上输出user的值 --%>
</body>
- 语法2:${键名},省略域名表示从最小的域中查找是否有该键对应的值,直到找到为止。域对象的范围:pageContext < request < session < application
<body>
<%
// 在域中存储数据
application.setAttribute("user", "Tony");
request.setAttribute("user","NrvCer");
%>
${user} <%--将在页面上输出user的值NrvCer --%>
</body>
- 获取对象,List集合,Map集合的值
1. 获取对象:${域名称.键名.属性名},本质上是会去调用对象的getter方法
<body>
<%
Student s = new Student("张三",23);
request.setAttribute("user",s); // request域中存储对象
%>
${requestScope.user} // com.test.Student@5eea53a4
${requestScope.user.name} // 张三
${requestScope.user.age} // 23
</body>
2. 获取List集合的值:${域名称.键名[索引]}
<body>
<%
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
request.setAttribute("number",list); // request域中存储对象
%>
${requestScope.number} //[100, 200]
${requestScope.number[0]} //100
${requestScope.number[1]} //200
</body>
3. 获取Map集合的值:${域名称.键名.key名称}
EL中的隐式对象
EL表达式中有11个隐式对象
1.pageContext
- 获取jsp其他8个隐式对象
<%--在jsp页面中动态获取虚拟目录--%>
${pageContext.request.contextPath}
2.JSTL标签
概述
- 概念:Java sever tag library,jsp标准标签库
- 作用:用于简化和替换jsp页面上的Java代码
- 使用步骤
1. 导入jstl相关jar包
2. 引入标签库:taglib指令
3. 使用标签
常用的jstl标签
- if:相当于Java代码的if语句
- choose:相当于Java代码的switch语句
- foreach:相当于Java代码的for语句