javaweb:EL表达式

版权声明: https://blog.csdn.net/weixin_42442713/article/details/84201667

EL表达式简介:

EL 全名为Expression Language

EL主要作用:

获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

执行运算:

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

获取web开发常用对象

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

调用Java方法

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

EL注意事项:

EL表达式是JSP 2.0(JavaEE1.4)规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。

l注意:有些Tomcat服务器如不能使用EL表达式

  1)升级成tomcat6

  2)在JSP中加入<%@ page isELIgnored="false" %>

获取数据(1):

l使用EL表达式获取数据语法:“${标识符}”

lEL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从pagerequestsessionapplication四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。

l示例:${user}

获取数据(2):

lEL表达式也可以很轻松获取JavaBean的属性,或获取数组、CollectionMap类型集合的数据,例如:

${user.address.city}

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

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

l. [ ] 区别

l结合JSTLforeach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:

迭代数组

迭代collection类型集合

迭代map类型集合

执行运算:

l语法:

 

EL语法

${  EL表达式 } : 注意${间不要有空格。

EL存取变量:${ a },取出某一范围中名称为a的变量,默认会按pagerequestsessionapplication的顺序查找。

<%

  request.setAttribute("str", str);

%>

${ str }

${ RequestScope.str }

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

<%@ 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支持运算</title>
</head>
<body>

<%
	request.setAttribute("n1", 10);
	request.setAttribute("n2", 20);
	request.setAttribute("n3", 30);
	request.setAttribute("n4", 40);
%>
<h4>EL表达式支持运算</h4>
${ n1 + n2 }

<h4>是否相等</h4>
${ n1 == n2 }  ${ n1 eq n2 }

<h4>是否不等</h4>
${ n1 != n2 } ${ n1 ne n2 }

<h4>大于或者小于</h4>
${ n1 > n2 } ${ n1 gt n2 }  ${ n1 < n2 } ${ n1 lt n2 }

<h4>大于等于或者小于等于</h4>
${ n1 >= n2 } ${ n1 ge n2 }  ${ n1 <= n2 } ${ n1 le n2 }

<h4>与或非</h4>
${ n1 > n2 && n3 > n4 } ${ n1>n2 and n3>n4 }
${ n1 > n2 || n3 > n4 } ${ n1>n2 or n3>n4 }
${ !(n1>n2) }	${ not(n1>n2) }

</body>
</html>


EL表达式保留关键字:

 l所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误

获得web开发常用对象:

lEL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。

l语法:${隐式对象名称:获得对象的引用

隐含对象名称

描       述

pageContext

对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)

pageScope

代表page域中用于保存属性的Map对象

requestScope

代表request域中用于保存属性的Map对象

sessionScope

代表session域中用于保存属性的Map对象

applicationScope

代表application域中用于保存属性的Map对象

隐含对象名称

描       述

param

表示一个保存了所有请求参数的Map对象

paramValues

 

表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]

header

表示一个保存了所有http请求头字段的Map对象

headerValues

 

同上,返回string[]数组。注意:如果头里面有- ,例Accept-Encoding,则要headerValues["Accept-Encodings"]

cookie

表示一个保存了所有cookieMap对象

initParam

表示一个保存了所有web应用初始化参数的map对象

 

测试各个隐式对象

demo1.jsp:

<%@ 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>Insert title here</title>
</head>
<body>

<form action="/day13/jsp/eldemo3.jsp" method="post">
	用户名:<input type="text" name="username" /><br/>
	<input type="submit" value="提交"/>
</form>

</body>
</html>


demo2.jsp:

<%@ 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>Insert title here</title>
</head>
<body>

<h4>传统方式</h4>
<%= request.getParameter("username") %>

<h4>使用EL表达式内置对象获取请求参数</h4>
${ param.username }
${ paramValues.username[0] }


<h4>使用EL表达式的内置对象获取请求头的信息</h4>
${ header.referer }
${ headerValues.referer[0] }
${ header["user-agent"] }

<h4>获取全局初始化参数的值</h4>
${ initParam.encoding }


<h4>使用传统方式获取cookie中的值</h4>
<%
	Cookie [] cookies = request.getCookies();
	for(Cookie c : cookies){
		if(c.getName().equals("last")){
			String value = c.getValue();
%>			
		<font color="blue"><%= value %></font>
<% 		
		}	
	}
%>

<h4>使用EL表达式来获取内容</h4>
${ cookie.last.name }  -- ${ cookie.last.value }
<font color="red">${ cookie.last.value }</font>

<form action="">
	<input type="text" name="username" value="${ cookie.last.value }" />
</form>


<h4>EL表达式中的pageContext对象</h4>
${ pageContext.request.contextPath }
${ pageContext.request.remoteAddr }

<form action="${ pageContext.request.contextPath }/xxx" method="post">
	<input type="text" name="username"  />
</form>

</body>
</html>


 

注意事项

测试headerValues时,如果头里面有- ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]

测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}${cookie.key.value}

EL表达式获取集合的值:

el1.jsp

<%@page import="cn.itcast.domain.Person"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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>Insert title here</title>
</head>
<body>

<%
	pageContext.setAttribute("username", "美美");
	request.setAttribute("username", "张默");
	session.setAttribute("username", "乌鸦");
	application.setAttribute("username", "李代沫");
%>

<h4>EL获取域对象中的值</h4>
${ pageScope.username }
${ requestScope.username }
${ sesssionScope.username }
${ applicationScope.username }


<h4>从数组中取值(把数组存到域对象中)</h4>
<%
	String [] arrs = new String[]{"美美","张默","房祖名"};
	// 先把数组存到域中
	pageContext.setAttribute("arrs", arrs);
%>
${ arrs[2] }

<h4>从List集合中取值(域对象中)</h4>
<%
	List<String> list = new ArrayList<String>();
	list.add("美美");
	list.add("张默");
	list.add("房祖名");
	pageContext.setAttribute("list", list);
%>
${ list[1] }

<h4>从Map集合中取值</h4>
<%
	Map<String,String> map = new HashMap<String,String>();
	map.put("aaa", "美美");
	map.put("bbb", "张默");
	map.put("ccc-ddd", "房祖名");
	pageContext.setAttribute("map", map);
%>
${ map["ccc-ddd"] }


<h4>从List存入对象集合中取值(域对象中)</h4>
<%
	List<Person> ulist = new ArrayList<Person>();
	ulist.add(new Person("美美","123"));
	ulist.add(new Person("张默","456"));
	ulist.add(new Person("祖明","789"));
	pageContext.setAttribute("ulist", ulist);
%>
${ ulist[2].username }


</body>
</html>

Person.java:

package cn.itcast.domain;

public class Person {
	
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Person(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public Person() {
		super();
	}
	public String toString() {
		return "Person [username=" + username + ", password=" + password + "]";
	}

}

 

猜你喜欢

转载自blog.csdn.net/weixin_42442713/article/details/84201667