JavaWeb 学习笔记总结( 二 )
Posted IT_Holmes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb 学习笔记总结( 二 )相关的知识,希望对你有一定的参考价值。
文章目录
1. EL表达式
El表达式的全称:Expression Language(表达式语言)。
EL表达式的作用:主要替代jsp页面中的表达式脚本在jsp页面进行数据的输出。
为什么要要用EL表达式来替代jsp的数据输出?
因为EL表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多。
举例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Express Language</title>
</head>
<body>
<%
request.setAttribute("key","值");
%>
表达式脚本输出key的值是:<%=request.getAttribute("key")%><br>
表达式脚本输出不存在的key2的值是:<%=request.getAttribute("key2")%><br>
<hr>
EL表达式输出key的值是:$key<br>
EL表达式输出不能存的key2的值是:$key2
</body>
</html>
上面的输出结果是不同的!
如果想要表达式也是空串,还得写成三元表达式来判断:
<%=request.getAttribute("key2")==null?"":request.getAttribute("key2")%><br>
相比较EL表达式更为简洁。
总结:
- El表达式的格式是:$表达式 。
- EL表达式在输出null值时,输出的是空串‘;而jsp表达式脚本输出null值时,输出null字符串。
2. EL 表达式 搜索域数据的顺序
EL表达式主要在jsp页面中输出数据,而且主要输出域对象中的数据。
那么,如果四个域中都有相同的key的数据时,就是有重复的key值。
EL表达式会按照四个域的从小到大的顺序,查找,查找到就输出。
pageContext < request < session < application
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//四个域中都保存了相同的数据
application.setAttribute("key", "application");
session.setAttribute("key", "session");//session保存的数据,必须关闭浏览器后才消失
request.setAttribute("key", "request");
pageContext.setAttribute("key", "pageContent");
//当四个域中都有相同的key的数据时,EL表达式会按照四个域的从小到大的顺序,查找,查找到就输出。
//pageContext < request < session < application
%>
$key
</body>
</html>
3. El表达式 调用类属性
我们在写EL表达式时,调用属性时,并不是直接调用属性,而是先调用属性对应的get方法,因此,如果我们想要把类中的属性使用EL表达式展现在jsp页面上,我们必须在java类中定义属性对应的get方法!
案例:
person.java 代码:
package com.test.el01;
import java.util.List;
import java.util.Map;
public class Person
private String name;
private String[] phones;
private List<String> cities;
private Map<String,Object> map;
private int age = 10;
//倘若没有age的get方法,那么EL表达式调用age会直接报错!
//public int getAge()
// return age;
//
public void setAge(int age)
this.age = age;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String[] getPhones()
return phones;
public void setPhones(String[] phones)
this.phones = phones;
public List<String> getCities()
return cities;
public void setCities(List<String> cities)
this.cities = cities;
public Map<String, Object> getMap()
return map;
public void setMap(Map<String, Object> map)
this.map = map;
public Person()
super();
public Person(String name, String[] phones, List<String> cities, Map<String, Object> map)
super();
this.name = name;
this.phones = phones;
this.cities = cities;
this.map = map;
@Override
public String toString()
// TODO Auto-generated method stub
return "name:"+name+","+"phones:"+phones+","+"cities:"+cities+","+"map:"+map;
jsp页面:
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.test.el01.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Person p = new Person();
p.setName("张三");
p.setPhones(new String[]"1234567","12212331");
List<String> cities = new ArrayList<String>();
cities.add("北京");
cities.add("上海");
p.setCities(cities);
Map<String,Object> map = new HashMap<String,Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
p.setMap(map);
pageContext.setAttribute("person", p);
%>
输出Person:$person<br>
输出Person的name属性:$person.name<br>
输出Person的phones数组的属性值:$person.phones[0]<br>
输出Person的cities集合的属性值组:$person.cities<br>
输出Person的cities集合的属性的某一个值:(和数组差不多。)$person.cities[1]<br>
输出Person的map集合的属性:$person.map<br>
输出Person的map集合的属性的某一个key值:$person.map.key2<br>
输出Person的age属性值:$person.age<br>
</body>
</html>
4. EL表达式 运算
4.1 关系运算符
4.2 逻辑运算符
4.3 算数运算符
5. EL表达式 empty运算
empty运算可以判断一个数据是否为空,如果为空,则输出true,不为空输出false。
什么情况下EL表达式为空?
- 值为null值得时候,为空。
- 值为空串的时候,为空。
- 值是Object类型数组,长度为零的时候。
- list集合,元素个数为零。
- map集合,元素个数为零。
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//1.值为null值得时候,为空。
request.setAttribute("emptyNull", null);
//2.值为空串的时候,为空。
request.setAttribute("emptyStr", "");
//3.值是Object类型数组,长度为零的时候。
request.setAttribute("emptyArr", new Object[]);
//4.list集合,元素个数为零。
request.setAttribute("emptyList", new ArrayList());
//5.map集合,元素个数为零。
request.setAttribute("emptyMap", new HashMap());
%>
$ empty emptyNull <br>
$ empty emptyStr <br>
$ empty emptyArr <br>
$ empty emptyList <br>
$ empty emptyMap <br>
</body>
</html>
6. EL表达式 三元运算 , .点运算符,[]中括号运算符
EL中三元表达式如下:
$ 表达式1?表达式2:表达式3
例如:$ 12>3 ? “胡说3大于12”:true
.点运算,可以输出类对象中某个属性的值,就是负责调用的。
[]中括号运算,可以输出有序集合中某个元素的值。
并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值,就像下面的案例一样,本质上就是区分一些特殊字符的情况。
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("a.a.a", "value1");
map.put("b+b+b", "value2");
map.put("c-c-c", "value3");
request.setAttribute("map", map);
%>
<!-- 输出整个map -->
$ map <br>
<!-- 输出单个map中a.a.a的值 , 但是输出不到,就是因为 .点运算符 的影响,它以为是a下的a下的a。-->
$ map.a.a.a
<!-- 这个时候就用到了[]中括号运算符了 -->
$ map['a.a.a'] 或者 $ map["a.a.a"] <br>
$ map['b+b+b'] 或者 $ map["b+b+b"] <br>
$ map['c-c-c'] 或者 $ map["c-c-c"] <br>
</body>
</html>
7. EL表达式 11个隐含对象
7.1 11个隐含对象
EL表达式的11个隐含对象,是它自己定义的(内置),可以直接使用。
7.2 EL 获取四个特定域中的属性
特定域属性 | 特定域 |
---|---|
pageScope | pageContext域 |
requestScope | Request域 |
sessionScope | Session域 |
applicationScope | ServletContext域 |
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("key1", "pageContext1");
pageContext.setAttribute("key2", "PageContext2");
request.setAttribute("key1", "request1");
request.setAttribute("key2", "request2");
session.setAttribute("key1", "session1");
session.setAttribute("key2", "session2");
application.setAttribute("key1", "application1");
application.setAttribute("key2", "application2");
%>
<!-- 如果调用默认的,那他自然是按照由小到大获取,只能获取到pageContext设置的属性: -->
$ key1 <br> $ key2 <br>
*******************<br>
<!-- 我们想要获得其他的就需要EL对应的四个内置对象了 -->
$ pageScope.key1 <br>
$ pageScope.key2 <br>
$ requestScope.key1 <br>
$ requestScope.key2 <br>
$ sessionScope.key1 <br>
$ sessionScope.key2 <br>
$ applicationScope.key1 <br>
以上是关于JavaWeb 学习笔记总结( 二 )的主要内容,如果未能解决你的问题,请参考以下文章
[硬核]卷起来!两万六千字总结的JavaWeb核心技术学习笔记