JSP学习之EL表达式详解

Servlet和jsp数据流转获取方式

  • 问题:
    在servlet进行请求处理后,使用作用域对象作为数据流转的载体。将数据流转给对应的jsp文件。那么怎么在jsp中获取做哟用于中的数据呢?
  • 使用:

一、传统方式:使用request作用域进行数据流转,在jsp页面中使用java脚本段语句。

(1)普通字符串

request.setAttribute("str", "今天天气很好");
<%=request.getAttribute("str") %>

(2)对象类型

User u = new User(1, "柳岩", "拍电影", new Address("河南","商丘","虞城县"));
req.setAttribute("user", u);
需要导User包<page>指令中
<%=((User)request.getAttribute("user")).getAddr().getTown() %>

(3)集合类型

//list集合
		//存储普通字符串
		List<String> list = new ArrayList<String>();
		list.add("渣渣辉");
		list.add("关晓彤");
		list.add("刘诗诗");
		req.setAttribute("list", list);
		//存储对象
		User u2 = new User(2, "古力娜扎", "拍电影", new Address("新疆","乌鲁木齐", "乌鲁木齐"));
		List<User> list2 = new ArrayList<User>();
		list2.add(u2);
		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(2, "迪丽热巴", "拍电影", new Address("新疆","乌鲁木齐", "乌鲁木齐")));
		req.setAttribute("map2", map2);
list集合:
	<%=((ArrayList)request.getAttribute("list")).get(2) %>
	<%=((User)((ArrayList)request.getAttribute("list2")).get(0)).getAddr().getPre() %>
map集合:
	<%=((HashMap)request.getAttribute("map")).get("b") %>
	<%=((User)((HashMap)request.getAttribute("map2")).get("a1")).getUname() %>

(4)获取URL中的请求数据

http://localhost:8080/EL/ELService?uname=12&pwd=123
<%=request.getParameter("uname") %>
  • 传统方式获取作用域数据:
    缺点一:导入包。
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="com.test.pojo.*, java.util.*"%>

缺点二:需要强制转换类型。
缺点三:获取数据的代码过于麻烦。


二、使用EL表达式方式获取作用域数据

(1) 获取请求数据

http://localhost:8080/EL/ELService?uname=12&pwd=123&fav=1&fav=2
${param.uname}
${paramValues.fav[0] }

(2) 获取普通字符串

${str }

(3) 获取对象类型

${user.addr.town }

(4) 获取集合类型

${list[2] }
${list2[0].addr.pre }
${map.b }
${map2.a1.uname }

EL表达式学习

  • 什么是EL表达式?
    全称:Expression Language,一种写法非常简洁的表达式。语法简单易懂,便于使用。表达式语句的灵感来自于ECMAScript和XPath表达式语言。

  • EL表达式的作用:
    作用:让jsp书写起来更加的方便。简化在jsp中获取作用或者请求数据的写法。也会搭配JSTL来进行使用。

  • 使用EL表达式:
    语法结构${expression},提供 .(点)[ ] 两种运算符来存取数据;

  • 使用:
    a):使用EL表达式获取请求数据
    获取用户请求数据
    获取请求头数据
    获取cookie数据
    b)使用EL表达式获取作用域数据
    获取作用域数据
    作用域查找顺序
    获取指定作用域中的数据
    c)使用EL表达式进行运算
    算术运算
    关系运算
    逻辑运算
    d)EL表达式空值判断empty

  • 作用:获取作用域对象中的数据

注意:
	获取的是pageContext、request、session、application四个对象中的数据,其他数据
一概不理会。找到了则获取返回,找不到则什么都不做,也不报错。
  • 语法
    ${表达式}
  • 请求数据
Request对象存储了请求数据→param.键名,直接返回值
Request对象存储了请求数据→paramValues.键名[0],返回的是数组
  • 通过setAttribute方法存储到作用域对象中的数据
${键名} 返回键名所对应的值

注意:
	如果存储的是普通字符串则直接返回
	如果存储的是对象,则返回的是对象
	
获取对象中的数据:
	普通对象:${键名.属性名.属性名….}
	
	集合对象:
		List集合:
			${键名[0]}
		Map集合:
			${键名.map集合存储的键名}

EL的作用域查找顺序

  • 作用域查找顺序
    默认:
	PageContext→request→session→applicatoin	
	注意:
		每次查找都是从小作用域到大作用域进行查找,找到了则获取,不再继续找了。

自定义:

<h1>EL的作用域查找顺序</h1>
<%
	pageContext.setAttribute("hello", "hello pageContext");
	request.setAttribute("hello", "hello request");
	session.setAttribute("hello", "hello session");
	application.setAttribute("hello", "hello application");
%>

<b>${hello }</b><br>
<b>${pageScope.hello }</b><br>
<b>${requestScope.hello }</b><br>
<b>${sessionScope.hello }</b><br>
<b>${applicationScope.hello }</b><br>

EL表达式的逻辑运算

  • ${逻辑表达式}:&&,||,!

  • ${算术表达式}:+,-

  • ${关系表达式}:>,<,三目运算

http://localhost:8080/EL/ELService? a=6&b=1
<h1>EL表达式的逻辑运算</h1>

${param.a+param.b }

${1+2 }--${1*2 }--${4/2 }--${4-2 }--${4%3 }

${3==3 }--${4>2 }--${sex==1?'男':'女' }--${1+'2' }
以此类推
	注意: + 表示加法运算,不表示字符连接;
		  + 不能做字符串连接,否则会报错;

EL表达式-空值判断、获取请求头、cookie数据

一、空值判断

  • 表达式:
    ${empty 键名}
  • 作用:
    判断键名对象的值是否存有数据
  • 例子
	//空值判断
	req.setAttribute("s", "");
	req.setAttribute("s1", new User());
	req.setAttribute("s2", new ArrayList());
	req.setAttribute("s3", new HashMap());
<h1>EL表达式的控制判断</h1>
	${empty s }<br>
<!-- User对象有默认值,所以为false -->
	${empty s1 }<br>
	${empty s2 }<br>
	${empty s3 }<br>

二、EL获取请求头数据(相当于获取Map)

  • ${header}
    返回所有的请求头数据
  • ${header[“键名”]}
    返回指定的键名的请求头数据
  • ${headerValues[“键名”]}
    返回指定的键名(同键不同值)的请求头数据数组

三、EL获取cookie数据(相当于获取Map)

  • ${cookie }
    返回存储了所有的cookie对象的map集合

  • ${cookie.键名 }
    返回指定的cookie对象

  • ${cookie.键名.cookie存储数据的键名 }
    返回指定的cookie对象存储的数据的键名

  • ${cookie.JSESSIONID }

  • ${cookie .JSESSIONID.name } 返回键名

  • ${cookie.JSESSIONID.value } 返回值

注意:获取请求头数据使用频率高,获取cookie数据使用频率低

发布了46 篇原创文章 · 获赞 11 · 访问量 3903

猜你喜欢

转载自blog.csdn.net/qq_42197800/article/details/93381060