EL表达式
可以进行servlet到JSP之间数据的流转。让jsp书写起来更加的方便,简化在jsp中获取作用域或者请求数据的写法。也会搭配jstl一起使用。
与传统方式获取作用域数据比较:
EL:不需要导包,不需要强转,代码简洁
使用EL表达式获取作用域数据
注意:
获取的是pageContext、request、session、application四个对象中的数据,其他数据不理会,找到了就返回,找不到什么也不做。
语法:
${表达式}
表达式:
1、获取请求数据:
request对象存储请求数据:param.键名 (返回值)
request对象存储请求数据:paramvalues.键名 (返回的是数组)
2、通过setAttribute方法存储到作用域对象中的数据
${键名} 返回键名所对应的值
注意:
(1)如果存储的是普通字符串则直接返回
(2)如果存储的是对象,则返回的是对象
3、获取对象中的数据:
普通对象:${键名.属性名.属性名......}
集合对象:
list集合:${键名[角标]}
map集合:${键名.map集合存储的键名}
servlet:
package El;
import com.pojo.Address;
import com.pojo.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@WebServlet("/El")
public class ELServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String uname=req.getParameter("uname");
String uage=req.getParameter("uage");
//使用request作用域进行数据流转
//普通字符串
req.setAttribute("str","今天又出太阳了,hiahia");
//对象类型
User u = new User(1, "lyr", "吃", new Address("河南","商丘", "睢阳区"));
req.setAttribute("user",u);
//集合类型
//List集合
//存储普通字符
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("赵四");
//存储对象
User u2 = new User(2, "孔鑫" ,"吃了睡", new Address("河南","周口","淮阳"));
List<User> list2 = new ArrayList<User>();
list2.add(u2);
req.setAttribute("list",list);
req.setAttribute("list2",list2);
//Map集合
//存储普通字符
Map<String,String> map = new HashMap<String,String>();
map.put("a","郑州");
map.put("b","武汉");
map.put("c","商丘");
req.setAttribute("map",map);
//存储对象
Map<String ,User> map2 = new HashMap<String,User>();
map2.put("a1",new User(3,"老妹儿","皮",new Address("河南","商丘", "睢阳区")));
req.setAttribute("map2",map2);
//请求转发
req.getRequestDispatcher("/el.jsp").forward(req,resp);
return;
}
}
jsp:
<%--
Created by IntelliJ IDEA.
User: ASUS
Date: 2020/2/17
Time: 11:59
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL进行数据获取</title>
</head>
<body>
<b>${param.uname}</b></br>
<b>${str}</b></br>
<b>${user.addr.town}</b></br>
<b>${list[2]}</b></br>
<b>${list2[0].addr.pri}</b></br>
<b>${map.c}</b></br>
<b>${map2.a1.uname}</b></br>
</body>
</html>
作用域查找顺序
1、默认查找顺序:
pageContext->request->session->application
注意:
每次查找都是从小到大进行查找,找到了就获取,不会继续找下去。
2、指定查找:
${pageScope.键名}
${requestScope.键名}
${sessionScope.键名}
${applicationScope.键名}
EL表达式的逻辑运算:
1、${逻辑表达式}:&& || !
2、${算数表达式}:+,-,*,/ , 三目运算
注意:+表示加法运算,不表示字符连接。
例:${1+3} ${3-1} ${2*3} ${4/2}
3、${关系表达式}:>,<,>=,==,!=
EL空制判断:
${empty 键名}
作用:判断键名对象的值是否存有数据
EL获取请求头数据和Cookie数据:
1、请求头数据:
${header}:返回所有的请求头数据
${header["键名"]}:返回指定键名的请求头数据
${headerValues["键名"]}:返回指定的键名(同键不同值)的值的数组
2、获取Cookie数据:
${cookie}:返回存储了所有Cookie对象的map集合
${cookie.键名}:返回指定的cookie对象
${cookie.键名.name}:返回指定的Cookie对象存储的数据的键名
${cookie.键名.value}:返回指定的Cookie对象存储的数据的值