• 69期-Java SE-047_EL表达式


    ### 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>
  • 相关阅读:
    多属性量化决策模型
    对称加密与非对称加密
    子网掩码
    网络安全
    万维网WWW、电子邮件email与文件传输FTP
    DHCP协议
    DNS协议
    ARP协议与RARP协议
    springboot WebSocket的使用
    Java调用Python的两种方式
  • 原文地址:https://www.cnblogs.com/HiJackykun/p/11182725.html
Copyright © 2020-2023  润新知