D09 Sping Boot 入门 Sping框架--Java Web之El表达式和JSTL标签
El表达式
1、什么是EL表达式,有什么作用
Ⅰ、EL表达式全称Expression Language。表达式语言。
Ⅱ、EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据输出。
Ⅲ、EL表达式比jsp表达式脚本简洁。
比较
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>a.jsp</title> 5 </head> 6 <body> 7 <% 8 request.setAttribute("key","value"); 9 %> 10 <%--jsp表达式脚本输出数据--%> 11 jsp表达式脚本输出的值:<%=request.getAttribute("key")%> 12 <br /> 13 <%--EL表达式输出数据--%> 14 EL表达式输出的值:${key} 15 </body> 16 </html> 17 18 EL和jsp表达式脚本
EL表达式主要是在jsp页面中输出数据,主要是输出域对象中的数据
2、EL表达式搜索域数据的顺序
3、EL表达式输出Bean的普通属性,数组属性。List集合属性,map集合属性。
Ⅰ、需求--输出Person类中普通属性,数组属性。list集合属性,map集合属性。
Ⅱ、新建Person类
1 package com.gychen.pojo; 2 3 import java.util.Arrays; 4 import java.util.List; 5 import java.util.Map; 6 7 public class Person { 8 9 // 需求--输出Person类中普通属性,数组属性。list集合属性,map集合属性。 10 11 private String name; 12 private String[] phones; 13 private List<String> cities; 14 private Map<String,Object> map; 15 16 //生成get和set方法 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 public String[] getPhones() { 27 return phones; 28 } 29 30 public void setPhones(String[] phones) { 31 this.phones = phones; 32 } 33 34 public List<String> getCities() { 35 return cities; 36 } 37 38 public void setCities(List<String> cities) { 39 this.cities = cities; 40 } 41 42 public Map<String, Object> getMap() { 43 return map; 44 } 45 46 public void setMap(Map<String, Object> map) { 47 this.map = map; 48 } 49 50 //生成toString 51 52 @Override 53 public String toString() { 54 return "Person{" + 55 "name=" + name + 56 ", phones=" + Arrays.toString(phones) + 57 ", cities=" + cities + 58 ", map=" + map + 59 '}'; 60 } 61 62 //生成有参和无参 63 64 public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) { 65 this.name = name; 66 this.phones = phones; 67 this.cities = cities; 68 this.map = map; 69 } 70 71 public Person() { 72 } 73 }
Ⅲ、新建jsp文件
1 <%@ page import="com.gychen.pojo.Person" %> 2 <%@ page import="java.util.ArrayList" %> 3 <%@ page import="java.util.List" %> 4 <%@ page import="java.util.HashMap" %> 5 <%@ page import="java.util.Map" %><%-- 6 Created by IntelliJ IDEA. 7 User: 99622 8 Date: 2020/4/1 9 Time: 16:46 10 To change this template use File | Settings | File Templates. 11 --%> 12 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 13 <html> 14 <head> 15 <title>c.jsp</title> 16 </head> 17 <body> 18 <% 19 Person person = new Person(); 20 person.setName("gychen"); 21 person.setPhones(new String[]{"18795908563","18795908551","18795908396"}); 22 23 List<String> cities = new ArrayList<String>(); 24 cities.add("北京"); 25 cities.add("上海"); 26 cities.add("深圳"); 27 person.setCities(cities); 28 29 Map<String,Object> map = new HashMap<>(); 30 map.put("key1","value1"); 31 map.put("key2","value2"); 32 map.put("key3","value3"); 33 map.put("key4","value4"); 34 person.setMap(map); 35 36 pageContext.setAttribute("person",person); 37 38 %> 39 40 输出Person:${ person }<br /> 41 输出Person的name属性:${ person.name }<br /> 42 输出Person的phone属性值:${ person.phones[0] }<br /> 43 输出Person的cities属性值:${ person.cities }<br /> 44 输出Person的map属性值:${ person.map }<br /> 45 输出Person的map某个属性值:${ person.map.key1 }<br /> 46 </body> 47 </html>
4、EL表达式--运算
Ⅰ、关系运算
关系运算符 | 说明 | 范例 | 结果 |
==或eq | 等于 | ${5==5}或${5eq5} | true |
!=或ne | 不等于 | ${5!=5}或${5ne5} | false |
<或lt | 小于 | ${3<5}或${3lt5} | true |
>或gt | 大于 | ${2>10}或${2gt10} | false |
<=或le | 小于等于 | ${5<=12}或${5le12} | true |
>=或ge | 大于等于 | ${3>=5}或${3ge5} | false |
Ⅱ、逻辑运算
逻辑运算符 | 说明 | 范例 | 结果 |
&&或and | 与运算 | ${12 == 12 && 12<11}或${12== 12 and 12 < 11} | true |
||或or | 或运算 | ${12 == 12 || 12<11}或${12== 12 or 12 < 11} | true |
!或not | 取反运算 | ${ !true}或${ not true } | false |
Ⅲ、算数运算
算数运算符 | 说明 | 范例 | 结果 |
+ | 加法 | ${ 12+8 } | 20 |
- | 减法 | ${ 18-8 } | 10 |
* | 乘法 | ${ 12*8 } | 96 |
/或div | 除法 | ${ 12/4 }或${ 12 div 4 } | 3 |
%或mod | 取模 | ${ 144%10 } 或 ${ 144 mod 4 } | 4 |
Ⅳ、empty运算
empty运算判断一个数据是否为空,如果为空则返回true,不为空返回false。
以下几种情况为空:
①、值为null值的时候为空
②、值为空字符串的时候为空
③、值是Object类型数组,长度为零的时候为空
④、list集合,元素个数为零的时候为空
⑤、map集合,元素个数为零的时候为空
Ⅴ、三元运算
表达式1?表达式2:表达式3
相当于
1 if(表达式1){ 2 表达式2 3 }else{ 4 表达式3 5 }
Ⅵ、.点运算和[]中括号运算
.运算,可以输出Bean对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值,还可以输出map集合中key里含有特殊字符的key的值。
5、EL表达式--11个隐含对象
JSTL标签库
1、JSTL标签库的使用步骤
Ⅰ、导入JSTL标签库的jar包。
Ⅱ、使用taglib指令引入标签库(IDEA里会自动引入)
2、core核心库的使用
Ⅰ、set标签 <c:set />
作用:set标签可以往域中保存数据。
1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4 <head> 5 <title>JSTL标签库</title> 6 </head> 7 <body> 8 9 <%-- 10 <c:set /> 11 作用:set标签可以往域中保存数据。 12 保存数据--> 域对象.setAttribute(key,value) 13 scope 属性设置保存到哪个域,例如scope="page",表示是保存到PageContext域(默认page) 14 var 属性为key 15 value属性为value 16 --%> 17 保存数据之前:${ pageScope.abc }<br /> 18 <c:set scope="page" var="abc" value="pageContext" /><br /> 19 保存数据之后:${ pageScope.abc }<br /> 20 </body> 21 </html>
Ⅱ、if标签 <c:if />
作用:用来做if判断
Ⅲ、多路判断 <c:choose><c:when><c:otherwise>
作用:多路判断。跟switch...case...default非常接近。
注意:1、这三个标签里不能用html注释,要用jsp注释。
2、when标签的父标签一定要是choose标签。
Ⅳ、forEach遍历标签 <c:forEach></c:forEach>
①、遍历1到10
②、遍历Object数组
③、遍历Map集合
④、遍历List集合--list中存放Student类,有属性:编号,用户名,密码,年龄,电话信息
新建一个Student类
1 package com.gychen.pojo; 2 3 public class Student { 4 private Integer num; 5 private String name; 6 private String password; 7 private Integer age; 8 private String phone; 9 10 public Integer getNum() { 11 return num; 12 } 13 14 public void setNum(Integer num) { 15 this.num = num; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 public String getPassword() { 27 return password; 28 } 29 30 public void setPassword(String password) { 31 this.password = password; 32 } 33 34 public Integer getAge() { 35 return age; 36 } 37 38 public void setAge(Integer age) { 39 this.age = age; 40 } 41 42 public String getPhone() { 43 return phone; 44 } 45 46 public void setPhone(String phone) { 47 this.phone = phone; 48 } 49 50 @Override 51 public String toString() { 52 return "Student{" + 53 "num=" + num + 54 ", name='" + name + '\'' + 55 ", password='" + password + '\'' + 56 ", age=" + age + 57 ", phone='" + phone + '\'' + 58 '}'; 59 } 60 61 public Student() { 62 } 63 64 public Student(Integer num, String name, String password, Integer age, String phone) { 65 this.num = num; 66 this.name = name; 67 this.password = password; 68 this.age = age; 69 this.phone = phone; 70 } 71 }
写jsp