### EL 表达式

- 什么是 EL 表达式?

  Expression Language (表达式语言)

- EL 表达式的作用?

  替代 JSP 页面中数据访问时复杂的编码方式。

- EL 的特点

  使用简单,可以用非常方便的形式来进行 JSP 页面的数据访问,替代 JSP 本身复杂的编码方式。

  语法:

  ```jsp
  ${EL表达式}
  ```

  通过变量名取值,变量名指的是保存在域对象中数据的 key 值。

  域对象是指 pageContext、request、session、application

  当四种域对象同时包含同名的变量时,EL 表达式按照优先级的先后顺序依次从四种域对象中取值。

  pageContext > request > session > application

  ```
  ${name}
  ```

  按照上述顺序依次进行查找,如果找到直接返回,否则向下传递,直到 application 中也没有找到,则返回空。

- 指定作用域进行查找

  指定从 pageContext 作用域中找 ${pageScope.name}

  指定从 request 作用域中找 ${requestScope.name}

  指定从 session 作用域中找 ${sessionScope.name}

  指定从 application 作用域中找 ${applicationScope.name}

- 获取对象的属性

  ${user.name}

  ${user["name"]}

  不是直接访问 user 对象的私有属性 name,而是通过反射机制访问 user 对象的 getName() 方法,其他熟悉的获取同理。

- 获取集合元素 List

  ```java
  package com.southwind.controller;
  
  import com.southwind.entity.User;
  
  import javax.servlet.ServletException;
  import javax.servlet.annotation.WebServlet;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  
  @WebServlet("/test.do")
  public class TestServlet extends HttpServlet {
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          List<User> list = new ArrayList<>();
          User user = new User();
          user.setId(1L);
          user.setName("张三");
          user.setAge(22);
          list.add(user);
          user = new User();
          user.setId(2L);
          user.setName("李四");
          user.setAge(23);
          list.add(user);
          user = new User();
          user.setId(3L);
          user.setName("王五");
          user.setAge(24);
          list.add(user);
          req.setAttribute("list",list);
          req.getRequestDispatcher("index.jsp").forward(req,resp);
      }
  }
  ```



```jsp
<%@ page import="com.southwind.entity.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <h1>学生信息</h1>
    ${list[0].name}
  </body>
</html>
```



- Map 集合

```jsp
${map["a"]}
${map.a}
```



- 执行表达式

错误写法

```jsp
${flag1} && ${flag2}
```

正确写法

```jsp
${flag1 && flag2}
${flag1 and flag2}
```

```
&& and
|| or
! not
== eq
!= ne
< lt
> gt
<= le
>= ge
```

empty:判断 EL 表达式所取的值是否为空,变量为 null;长度为 0 的 String;size 为 0 的集合

true 表示为空,false 表示不为空

${ empty name}



### EL 隐式对象

1、作用域访问对象(pageScope、requestScope、sessionScope、applicationScope)

2、参数访问对象,通过 EL 表达式取出 HTTP 请求中的参数

param、paramValues

```jsp
<%
  String name = request.getParameter("name");
%>
<%=name%>
${param.name}
```



```jsp
<%
String[] name = request.getParameterValues("name");
%>
<%=Arrays.toString(name)%>
<br/>
${paramValues.name[0]}
${paramValues.name[1]}
${paramValues.name[2]}
```



3、pageContext 对象

对页面信息和 JSP 内置对象的访问

```jsp
${pageContext.servletConfig.servletName}<br/>
${pageContext.servletConfig.servletContext.contextPath}<br/>
${pageContext.request}<br/>
${pageContext.response}<br/>
${pageContext.request.session}<br/>
```

 

 TestServlet.java

package com.southwind.controller;

import com.southwind.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/test.do")
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<User> list = new ArrayList<>();
        list.add(new User(1L,"张三",21));
        list.add(new User(2L,"李四",22));
        list.add(new User(3L,"王五",23));
        req.setAttribute("list",list);
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }
}

User.java

package com.southwind.entity;

public class User {
    private Long id;
    private String name;
    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public User(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

index.jsp

<%@ page import="com.southwind.entity.User" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <%
      List<User> list = (List<User>) request.getAttribute("list");
    %>

    <table>
      <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>年龄</th>
      </tr>
      <%
        for(int i=0;i<list.size();i++){
      %>
        <tr>
          <td>${list[0].id}</td>
          <td>${list[0].name}</td>
          <td>${list[0].age}</td>
        </tr>
      <%
        }
      %>
    </table>
  </body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
</web-app>

 

posted on 2019-07-13 23:52  HiJackykun  阅读(247)  评论(0编辑  收藏  举报