EL表达式语言(一)

叁歲伎倆 2021-06-15 20:36 655阅读 0赞

一、EL概述

1.1 EL的作用

EL是JSP内置的表达式语言。
JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。
JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。

1.2 EL的格式

格式:${ ... }
例如:${1+2}

1.3 关闭EL

如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored="true"
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}

1.4 EL运算符

在这里插入图片描述

1.5 EL不显示null

当EL表达式的值为null时,会在页面上显示空白,即什么都不显示。

二、JavaBean导航

我们通过一个示例,来演示通过EL语言进行JavaBean的导航。
首先新建一个Employee类,是标准的JavaBean格式:

  1. public class Employee {
  2. private String name;
  3. private double salary;
  4. private Address address;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public double getSalary() {
  12. return salary;
  13. }
  14. public void setSalary(double salary) {
  15. this.salary = salary;
  16. }
  17. public Address getAddress() {
  18. return address;
  19. }
  20. public void setAddress(Address address) {
  21. this.address = address;
  22. }
  23. @Override
  24. public String toString() {
  25. return "Employee [name=" + name + ", salary=" + salary + ", address="
  26. + address + "]";
  27. }
  28. }

我们再新建一个Address类,也为JavaBean格式:

  1. public class Address {
  2. private String city;
  3. private String street;
  4. public String getCity() {
  5. return city;
  6. }
  7. public void setCity(String city) {
  8. this.city = city;
  9. }
  10. public String getStreet() {
  11. return street;
  12. }
  13. public void setStreet(String street) {
  14. this.street = street;
  15. }
  16. @Override
  17. public String toString() {
  18. return "Address [city=" + city + ", street=" + street + "]";
  19. }
  20. }

我们新建一个jsp,关键代码如下:

  1. <body>
  2. <%
  3. Address address = new Address();
  4. address.setCity("beijing");
  5. address.setStreet("xisanqi");
  6. Employee emp = new Employee();
  7. emp.setName("xxx");
  8. emp.setSalary(23000);
  9. emp.setAddress(address);
  10. request.setAttribute("emp",emp);
  11. %>
  12. <h3>使用EL获取request域的emp</h3>
  13. ${requestScope.emp.address.street }
  14. </body>

使用浏览器访问的结果:
在这里插入图片描述

三、EL表达式的格式

先来了解一下EL表达式的格式,我们在学习了EL11个内置对象后来演示。

  • 操作List和数组:${list[0]}${arr[0]}
  • 操作bean的属性:${person.name}${person['name']},对应person.getName()方法;
  • 操作Map的值:${map.key}${map['key']},对应map.get(key)

四、EL内置对象

EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param;
  • paramValues;
  • header;
  • headerValues;
  • initParam;
  • cookie;
  • pageContext;

4.1 域相关内置对象(重点)

域内置对象一共有四个:

  • pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”)
  • requestScope:${requestScope.name}等同与request.getAttribute(“name”)
  • sessionScope:${sessionScope.name}等同与session.getAttribute(“name”)
  • applicationScope:${applicationScope.name}等同与application.getAttribute(“name”)

如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。
全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。
这四个对象的使用我们在前面的Javabean导航中已经做了演示。

4.2 请求参数相关内置对象

param和paramValues这两个内置对象是用来获取请求参数的。

  • param:Map<String,String>类型,param对象可以用来获取参数,与request.getParameter()方法相同。
    注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。
    演示一下:
    我们就在jsp中写这么一句,
    在这里插入图片描述
    打开浏览器访问这个jsp,另外附带上参数,我们看一下结果:
    在这里插入图片描述
  • paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。
    我们借用上面的例子,加上一句:
    在这里插入图片描述
    我们附带上新的参数,在浏览器里访问,看一下结果:
    在这里插入图片描述

4.3 请求头相关内置对象

header和headerValues是与请求头相关的内置对象:

  • header: Map<String,String>类型,用来获取请求头。
    示例:
    jsp代码:
    在这里插入图片描述
    访问浏览器:
    在这里插入图片描述
  • headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。

4.4 应用初始化参数相关内置对象

  • initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数。
    例如:
    我们在web.xml中加入这么两组参数:
    在这里插入图片描述
    我们在jsp中加入以下代码:
    在这里插入图片描述
    在浏览器中访问:
    在这里插入图片描述
  • cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。
    演示一下:
    jsp:
    在这里插入图片描述
    浏览器访问一下:
    在这里插入图片描述

4.6 pageContext对象

pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest(),可以${pageContext.request}。也就是读取JavaBean属性!!!


















































EL表达式 说明
${pageContext.request.queryString} pageContext.getRequest().getQueryString();
${pageContext.request.requestURL} pageContext.getRequest().getRequestURL();
${pageContext.request.contextPath} pageContext.getRequest().getContextPath();
${pageContext.request.method} pageContext.getRequest().getMethod();
${pageContext.request.protocol} pageContext.getRequest().getProtocol();
${pageContext.request.remoteUser} pageContext.getRequest().getRemoteUser();
${pageContext.request.remoteAddr} pageContext.getRequest().getRemoteAddr();
${pageContext.session.new} pageContext.getSession().isNew();
${pageContext.session.id} pageContext.getSession().getId();
${pageContext.servletContext.serverInfo} pageContext.getServletContext().getServerInfo();

发表评论

表情:
评论列表 (有 0 条评论,655人围观)

还没有评论,来说两句吧...

相关阅读

    相关 EL-表达式语言

    概述 EL是expression Language的简称,意思是表达式语言,在EL出现之前,开发jsp程序时,经常需要写如大量的Java语言嵌入在jsp页面,它的出现使得页面

    相关 EL表达式语言(二)

    接上篇:[EL表达式语言(一)][EL] 一、EL函数库 1. 什么EL函数库 EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的。