### 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>