EL表达式详解

1. 简介
        (1) JSP表达式 <%= %> 用于向页面中输出一个对象。
        (2) 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段。      

  (3) 使用EL表达式来代替JSP表达式 ,使用JSTL标签来代替JSP脚本片段。
        
        (4) EL表达式用来向页面输出内容
        
        getAttribute();//四个域对象都可以使用//作用不是接收请求参数,在使用getAttribute方法之前必须先使用setAttribute()将属性对方法域对象中;返回Object类型!
        
        getParameter()://仅仅是request使用!用于接收请求参数【url,form表单中】;返回值String类型
    
    
2. 基本语法
        (1)语法: ${表达式}
        用EL表达式获取服务器名称、端口信息、项目名

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5     <head>
 6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7         <title>Insert title here</title>
 8         <base href="http://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/"/>
 9     </head>
10     <body>
11         ${pageContext.request.serverName}
12         ${pageContext.request.serverPort}
13         ${pageContext.request.contextPath}
14     </body>
15 </html>


        (2) EL表达式可以从域中获取属性。
             - 使用 ${属性名}
             - 如果只填写一个属性名,EL表达式会自动做全域查找。
            
             - 所谓的全域查找,就是按照page request session  application四个域范围内分别,找到就返回属性,如果没找到什么都不返还。
            
             - 我们还可以指定去哪个域查找
                pageScope
                requestScope
                sessionScope
                applicationScope
 
            - 例子:
                查找request中属性
                    ${requestScope.属性名}


                查找session中的属性
                    ${sessionScope.属性名}
            
            - 注意:EL表达式只能获取域中的属性
                EL表达式不能直接调用对象的方法
                
            - 通过EL表达式读取对象的属性时,只需要${对象.属性名}
                EL表达式会自动调用对象的对应的getter方法,通过将属性名首字母大写,然后加上一个get
                
                注意:只要有属性,就可以一直点下去,也就说对象的属性是对象的话,我们也可以通过对象的属性的属性的方式调用!
                
            - 当读取一些名字比较特殊的属性时,这种特殊值必须要指定域,例如属性名带-:
                ${requestScope['属性名']}
        
        
        
3. 隐含对象
            > EL中一共有11个内置对象。
                ①pageContext
                    类型: PageContext
                        它和JSP中pageContext是一样的
                    作用: 可以获取到JSP中其他的隐含对象
                    
                    例如:可以获取项目名:
                        ${pageContext.request.contextPath }
                
                
                ②pageScope
                    类型:Map<String,Object>
                    代表:page域中的属性
                    作用:可以获取到page域中的属性
                    
                ③requestScope
                    类型:Map<String,Object>
                    代表:request域中的属性
                    作用:可以获取到request域中的属性
                    
                ④sessionScope
                    类型:Map<String,Object>
                    代表:session域中的属性
                    作用:可以获取到session域中的属性
                
                ⑤applicatScope
                    类型:Map<String,Object>
                    代表:application域中的属性
                    作用:可以获取到application域中的属性
                    
                    
                ⑥param
                    类型: Map<String , String>
                    代表:用户发送的请求参数
                    作用:可以获取请求参数
                    用法: ${param.参数名}
                    
                ⑦paramValues
                    类型:Map<String , String[]>
                    代表:一个请求参数对应的多个值
                    用法: ${paramValues.参数名[索引]}
                    
                header
                    作用:可以获取到用户发送的请求头
                    类型:Map<String , String>
                    例如:获取用户的系统信息 ${header['User-Agent']}
                    
                headerValues
                    类型: Map<String , String[]>
                    作用:可以获取一个头的多个值
            
                initParam;
                    类型:Map<String , String>
                    作用:获取整个WEB应用的初始化参数
            
                ⑪cookie
                    类型:Map<String , Cookie>
                    作用:用来获取Cookie

                    
    
4. 运算
        > 在EL中可以直接使用运算符进行运算。
        
        > 在EL中可以使用Empty元素符:
            如果值为null , empty则返回 true
            如果为空串, 则返回 true
            空的集合    返回true
            
        > 所以empty元素符经常用来判断集合或者字符串是否为空

代码示例:

 1 <%@page import="java.util.List"%>
 2 <%@page import="java.util.ArrayList"%>
 3 <%@page import="com.neuedu.el.User"%>
 4 <%@ page language="java" contentType="text/html; charset=UTF-8"
 5     pageEncoding="UTF-8"%>
 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 7 <html>
 8         <head>
 9         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10         <title>Insert title here</title>
11     </head>
12     <body>
13         ${3*5}
14         ${empty ""}
15         
16         <%
17             User user=new User();
18             request.setAttribute("user", user);
19         %>
20         
21         ${empty user}
22         
23         <%
24             List<User> list=new ArrayList<User>();
25             list.add(new User());
26             request.setAttribute("list", list);
27 
28         %>
29         
30         ${empty list}
31     </body>
32 </html>

运行结果:

user为实体对象,不为空,所以 ${empty user} 为false

因此${empty list}也为false

原文地址:https://www.cnblogs.com/double-s/p/8094712.html