#头条创作挑战赛#
7.5 EL 表达式
7.5.1 概述
EL(全称Expression Language )表达式语言,用于简化 JSP 页面内的 Java 代码。
EL 表达式的主要作用是 获取数据 。其实就是从域对象中获取数据,然后将数据展示在页面上。
而 EL 表达式的语法也比较简单, ${expression} 。例如:${brands} 就是获取域中存储的 key 为 brands 的数据。
7.5.2 演示
- 定义servlet,在 servlet 中封装一些数据并存储到 request 域对象中并转发到 el-demo.jsp 页面。
- @WebServlet ( "/demo1" ) public class ServletDemo1 extends HttpServlet { @Override protected void doGet ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { //1. 准备数据 List < Brand > brands = new ArrayList < Brand > (); brands . add ( new Brand ( 1 , "三只松鼠" , "三只松鼠" , 100 , "三只松鼠,好吃不上火" , 1 )); brands . add ( new Brand ( 2 , "优衣库" , "优衣库" , 200 , "优衣库,服适人生" , 0 )); brands . add ( new Brand ( 3 , "小米" , "小米科技有限公司" , 1000 , "为发烧而生" , 1 )); //2. 存储到request域中 request . setAttribute ( "brands" , brands ); //3. 转发到 el-demo.jsp request . getRequestDispatcher ( "/el-demo.jsp" ). forward ( request , response ); } @Override protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { this . doGet ( request , response ); }}
- 注意: 此处需要用转发,因为转发才可以使用 request 对象作为域对象进行数据共享
- 在 el-demo.jsp 中通过 EL表达式 获取数据
- <% @ page contentType = "text/html;charset=UTF-8" language = "java" %><% @ page isELIgnored = "false" %> <html> <head> <title> Title </title> </head> <body> ${brands} </body> </html>
- 注意:
- 通过EL表达式获取request域共享的数据时,在jsp页面上需要设置
- <%@ page isELIgnored="false"%>
- 默认情况下是 <%@ page isELIgnored="true"%> ,会将jsp页面的数据直接进行字符处理
- 在浏览器的地址栏输入 http://localhost:8080/jsp-demo/demo1 ,页面效果如下:

7.5.3 域对象
JavaWeb中有四大域对象:
- page:当前页面有效
- request:当前请求有效
- session:当前会话有效
- application:当前应用有效
el 表达式获取数据,会依次从这4个域中寻找,直到找到为止。而这四个域对象的作用范围如下图所示

查找的顺序为:page -> request -> seesion -> application
例如: ${brands},el 表达式获取数据,会先从page域对象中获取数据,如果没有再到 requet 域对象中获取数据,如果再没有再到 session 域对象中获取,如果还没有才会到 application 中获取数据。