【EL表达式详解】

一、EL表达式介绍

  • Expression Language表达式语言
  • 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
  • 在JSP2.0开始引入概念

语法格式:

       在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值

 

二、EL获取数据

  • EL只能从四大域中获取属性 page、request、session、application

1. 使用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>Insert title here</title>
</head>
<body>
    <%
        pageContext.setAttribute("name", "linjie");
        request.setAttribute("name", "lucy");
        session.setAttribute("name", "king");
        application.setAttribute("name", "bilibili");
    %>
    name=${applicationScope.name }
</body>
</html>

 

三、EL中的内置对象

EL有11个内置对象,这里主要讲域属性相关的4个和其他4个 
EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型

 

1、域属性相关(4个)

      pageScope:从page范围域属性空间中查找指定的key
      requestScope:从request范围域属性空间中查找指定的key
      sessionScope:从session范围域属性空间中查找指定的key
      applicationScope:从application范围域属性空间中查找指定的key

<%@ 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("name", "linjie");
        request.setAttribute("name", "lucy");
        session.setAttribute("name", "king");
        application.setAttribute("name", "bilibili");
    %>

    name=${applicationScope.name }<br>
    name=${pageScope.name }<br>
    name=${sessionScope.name }<br>
    name=${requestScope.name }<br>
</body>
</html>

2、其他重要内置对象(4个)


(1)pageContext

         该pageContext与JSP内置对象pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象。在EL中直接${pageContext.request}即可获取request对象,其底层调用的是pageContext.getRequest()方法。同理,也可以通过类似方法获取其他对象

重点:其中最常用的:${pageContext.request.contextPath },代表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>Insert title here</title>
</head>
<body>
<%-- ${pageContext.request.contextPath }代表web应用的根 --%>
    <form action="${pageContext.request.contextPath }/regster" method="POST">
        xxx<input type="text" name="name"/><br>
        yyy<input type="text" name="age"/><br>
        <input type="submit" value="点击">
    </form>
</body>
</html>

(2)param(获取请求中的指定参数) 

name=${param.name }<br>
age=${param.age }<br>

----等价于-----
request.getParameter()

(3)paramValues

hobby[0]=${paramValues.hobby[0] }<br>
hobby[1]=${paramValues.hobby[1] }<br>

------等价于--------
request.getParameterValues()

(4)initParam

         提示初始化参数是在web.xml文件中设置的。与上面两个不一样。

 name=${initParam.name }

------等价于---------

ServletContext.getInitParameter()

 

 

四、EL访问Bean的属性

1、什么是java Bean
JavaBean是公共Java类,但是为了编辑工具识别

需要满足至少三个条件

(1)有一个public默认构造器(例如无参构造器)
(2)属性使用public 的get,set方法访问,也就是说设置成private同时get,set方法与属性名的大小也需要对应。
(3)需要序列化。这个是框架,工具跨平台反映状态必须的


2、EL访问Bean属性
 EL可以通过${key.属性}的方式获取到指定值,其底层实际调用的是该对象的相应属性的get方法

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="linjie.com.Demo"
    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>
    <%
        Demo test=new Demo("linjie",12);
        request.setAttribute("ELttt", test);
    %>
    name=${requestScope.ELttt.name }<br>
    age=${requestScope.ELttt.age }<br>

    <!-- 若访问为null的对象的属性,EL是不会抛出空指针异常的,只是不显示而已 -->
    names=${requestScope.ELtttxx.name }<br>

</body>
</html>

 

五、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>Insert title here</title>
</head>     
<body>
    <%
        String[] names={"xlj","lucy","king"};
        pageContext.setAttribute("names", names);
    %>
    name[1]=${names[1] }<br>

    <!-- 若访问的数组元素下标超出了数组下标上限,EL不会抛出越界异常,只是不显示 -->
    names[5]=${names[5] }<br>
</body>
</html>

六、EL获取list中数据

<%@page import="java.util.*"%>
<%@ 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>
    <%
        List<String> names=new ArrayList<String>();
        names.add("xlj");
        names.add("lucy");
        pageContext.setAttribute("names", names);
    %>

    <!-- 因为List底层是数组,所以可以这样写 -->
    names[1]=${names[1] }<br>
</body>
</html>

【提示】EL可以通过索引访问List,但无法访问Set。因为Set中没有索引概念

七、EL访问Map

<%@page import="java.util.*"%>
<%@ 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>
    <%
        Map<String,Object> map=new HashMap<String,Object>();
        map.put("age", 20);
        map.put("name", "xlj");
        pageContext.setAttribute("map", map);
    %>
    name=${map.name }<br>
    age=${map.age }<br>
</body>
</html>

八、EL中的运算符(empty)

1、先说说几个常用运算符

  • 算术运算符:+、-、*、/、%(不支持++、–)
  • 关系运算符:==、!=、>、>=、<、<=
  • 逻辑运算符:!、&&、||、not、and、or
  • 条件运算符:?:
  • 取值运算符:[]、点号

2、empty运算符

用法为${empty 变量},结果为布尔值

 

总结

EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分
EL只能从四大域属性空间中获取数据(pageContext、request、session、application)
EL不会抛出空指针异常,只会不显示
EL不会抛出数组越界异常,只会不显示
EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值