Web---JSP---EL表达式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34928644/article/details/82587994

EL表达式简介

  • EL 全名为Expression LanguageEL主要作用:
  • 获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据。

  • 执行运算:

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。

  • 获取web开发常用对象

EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

  • 调用Java方法

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

获取数据

  • 使用EL表达式获取数据语法:“${标识符}”
  • EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从pagerequestsessionapplication四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。
  • 示例:${user}
  • EL表达式也可以很轻松获取JavaBean的属性,或获取数组、CollectionMap类型集合的数据,例如

${user.address.city}

${user.list[0]}:访问有序集合某个位置的元素

${map.key: 获得map集合中指定key的值

代码示例

<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.HashMap"%>
<%@page import="cn.hncu.domain.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>EL表达式技术演示1: 读取属性值</title>
	</head>
	<body>
		<h1>EL表达式技术演示1: 读取属性值</h1>
		基本语法: ${varName} <br>
    	作用:依次从page、request、session、application四个容器中
                   读取varName属性,若小容器存在则输出,忽略后面的大容器。
                   若4个容器中都不存在该varName指定的属性,则输出空字符串:""<br>
                   其它语法1:${sessionScope.varName},从指定的容器中读取。<br>
		其它语法2:${2*200+80},可以执行算术、逻辑运算<br>
        <hr>
        <!-- 1读取容器中的属性变量。PS:以后开发时都是在后台servlet把属性存入容器,这里为方便演示直接用java脚本代替 -->   
		<%
			pageContext.setAttribute("nameP", "Jack_P");
			request.setAttribute("nameR", "Jack_R");
			session.setAttribute("nameS", "Jack_S");
			application.setAttribute("nameA", "Jack_A");
		%>
		获取响应容器中的值:${nameP} ## ${nameR} ## ${nameS} ## ${nameA} <br>
		${abc},不存在时输出空字符串""<br>
		<hr>
		<!-- 2读取javaBean中的信息-->
		<%
			User user = new User();
			user.setName("Tom");
			user.setPwd("1234");
			user.setAge(23);
			//注意,必须把对象放到容器中EL表达式才能获取到
			pageContext.setAttribute("u", user);
		%>
		注意:EL读取数据时,是根据属性名去取的,而非变量名。<br>
		${user}-->WA ## ${u}-->AC &emsp;##&emsp; ${u.name} , ${u.age}<br>
		<hr>
		<!-- 3读取Map中的信息-->
		<%
			HashMap<String,Object> map = new HashMap<String,Object>();
			map.put("name", "Alice");
			map.put("age", 18);
			map.put("user", user);
			//再次强调,必须把对象 map 放到容器中,EL表达式才能获取到
			//这次放的reqsuest容器中
			request.setAttribute("map", map);
		%>
		${map.name} ## ${map.age} ## ${map.user.pwd}<br>
		也可以这样,但是少用,注意:[]中必须要用 " 或者 ' 把属性名引起来:${map['name']} ## ${map["age"]} ## ${map["user"]["pwd"]}
		<hr>
		<!-- 4读取List中的信息-->
		<%
			List<Object> list = new ArrayList<Object>();
			list.add("周末");
			list.add(20);
			list.add(user);
			list.add(map);
			session.setAttribute("list", list);
		%>
		${list}<br>
		注意:[]中是表示序号,不是属性名,所以不需要用 引号 引起来***  ${list[0]} ## ${list[1]} ## ${list[2].name} ## ${list[3].user.pwd}
	</body>
</html>

执行运算

语法:${运算表达式}EL表达式支持如下运算符:

  • empty运算符:检查变量是否为null或“空”,很好用!!!
  • 二元表达式:${user!=null?user.name : “”} 很好用!!!
  • [ ] . 号运算符

代码示例

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL表达式技术演示2: 执行运算</title>
</head>
<body>
	<h1>EL表达式技术演示2: 执行运算</h1>
	1.算术运算:+ 、- 、* 、/ 、 % 等<br>
	<% 
		pageContext.setAttribute("num", 10);
	%>
	num/2+20=${num/2+20}<br>
	2.条件运算: == 、 != 、 > 、 < 、>= 、<= 和逻辑运算 && 、 ||    <br>
	<% 
		pageContext.setAttribute("num", 10);
		pageContext.setAttribute("name", "Tom");
	%>
	
	num == 10 :${num == 10} ## name != "Tom": ${name != "Tom"} ## age < 20 && name=="Tom": ${ num < 20 && name == "Tom"}
	<br>
	3.问号表达式。<br>
	<% 
		pageContext.setAttribute("age", 18);
	%>
	age < 20 ? "young" : "old" --> ${ age < 20 ? "young" : "old" }
	<br>
	4.empty 运算符,判断一个属性是否为空.<br>
	${empty addr } ## ${empty age } ## ${!empty pwd}
	
</body>
</html>

获得web开发常用对象

  • EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
  • 语法:${隐式对象名称:获得对象的引用

代码示例

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>EL表达式技术演示3: 使用它内部的11个隐藏对象:</title>
	</head>
	<body>
		<h1>EL表达式技术演示3: 使用它内部的11个隐藏对象:</h1>
		11个隐藏对象:<br>
		&emsp;&emsp;1个便于操作其它'jsp的隐藏对象'的对象:pageContext   <br>
		&emsp;&emsp;4个相关容器:pageScope、requestScope、sessionScope、applicationScope   <br>
		&emsp;&emsp;6个其它:param 、paramValues 、header 、headerValues 、cookie 、 initParam   <br>
		<hr>
		pageContext:<br>
		&emsp;&emsp;项目路径:${pageContext.request.contextPath } <br>
		&emsp;&emsp;session的id: ${pageContext.session.id } <br>
		<br>
		4个相关容器:<br>
		<%
			pageContext.setAttribute("name", "Jack_P");
			//request.setAttribute("name", "Jack_R");
			session.setAttribute("name", "Jack_S");
			application.setAttribute("name", "Jack_A");
		%>
		${pageScope.name } ## ${requestScope.name } ## ${sessionScope.name } ## ${applicationScope.name }
		<br>
		<br>
		2个请求参数:param 和 paramValues <br>
		区别:param是单值 ,paramValues是多值 <br>
		<!-- http://127.0.0.1:8080/EL_Demo/jsps/elDemo3.jsp?name=jack&hobby=movie&hobby=game -->
		${param} ## ${param.hobby} <br>
		${paramValues} ## ${paramValues.hobby[1]}
		<br>
		<br>
		2个请求头:header 和 headerValues <br>
		${header} <br>
		${headerValues} <br>
		${header.cookie} <br>
		<br>
		1个 cookie <br>
		${cookie.JSESSIONID.value }<br>
		
		header.cookie与cookie区别:<br>
		&emsp;&emsp;header.cookie返回的是字符串,而cookie是一个容器。所以cookie可以精确都某个cookie的值,而header.cookie返回的是所有cookie的字符串
		<br>
		1个 initParam <br>
		注意:要获取到initParam需要在web.xml中配置!!!而且获取的是application容器的初始化参数<br>
		${initParam }
		<div style=" height: 400px">
		</div>
	</body>
</html>

获取ininParam是辅助的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>EL_Demo</display-name>

  <!-- 初始化参数 --> 
  <context-param>
  	<param-name>charset</param-name>
  	<param-value>utf-8</param-value>
  </context-param>
  


  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

完整项目代码

运行环境:JAVAEE6 、Tomcat8.5 、JDK8

完整代码链接

猜你喜欢

转载自blog.csdn.net/qq_34928644/article/details/82587994
今日推荐