EL表达式

网友投稿 850 2022-10-21

EL表达式

EL表达式

/**作者:呆萌老师*☑csdn认证讲师*☑高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/

EL(表达式语言)

1 EL概述

1.1 EL的作用

EL: (Expression Language) 表达式语言:用于计算和输出存储在标志位置(page,request,session,application)的java对象的值。

jsP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。

JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>

EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。

基本格式:${}

访问JavaBean:

第一种 点号记法:${Product.pid}; //常用

第二种 数组记法:${Product[“pid”]}

EL表达式先从request对象中取值 如果没有 就从session中取值,如果都取不到 就不显示,不会报空指针异常(即使调用不存在的对象的属性)。

EL表达式可以直接取对象中的私有属性,也不需要强转对象类型

1.2 EL的格式

格式:${…}

例如:${1 + 2}

1.3 关闭EL

如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。

如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:\${1 + 2}。

1.4 EL运算符

运算符

说明

范例

结果

+

${17+5}

22

-

${17-5}

12

*

${17*5}

85

/或div

${17/5}或${17 div 5}

3

%或mod

取余

${17%5}或${17 mod 5}

2

==或eq

等于

${5==5}或${5 eq 5}

true

!=或ne

不等于

${5!=5}或${5 ne 5}

false

<或lt

小于

${3<5}或${3 lt 5}

true

>或gt

大于

${3>5}或${3 gt 5}

false

<=或le

小于等于

${3<=5}或${3 le 5}

true

>=或ge

大于等于

${3>=5}或${3 ge 5}

false

&&或and

并且

${true&&false}或${true and false}

false

!或not

${!true}或${not true}

false

||或or

或者

${true||false}或${true or false}

true

empty

是否为空

${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”}

true

1.5 EL不显示null

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

2 EL表达式格式

先来了解一下EL表达式的格式!现在还不能演示它,因为需要学习了EL11个内置对象后才方便显示它。

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

3 EL内置对象

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

pageScoperequestScopesessionScopeapplicationScopeparam;paramValues;header;headerValues;initParam;cookie;pageContext;

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

域内置对象一共有四个:

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

如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。

Person.java

publicclass Person {

   private String name;

   privateintage;

   private String sex;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicint getAge() {

      returnage;

   }

   publicvoid setAge(int age) {

      this.age = age;

   }

   public String getSex() {

      returnsex;

   }

   publicvoid setSex(String sex) {

      this.sex = sex;

   }

}

编辑

全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。

3.2 请求参数相关内置对象

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

param:Map类型,param对象可以用来获取参数,与request.getParameter()方法相同。

编辑

注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

编辑

paramValues:paramValues是Map类型,当一个参数名,对应多个参数值时可以使用它。

编辑

3.3 请求头相关内置对象

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

header: Map类型,用来获取请求头。

编辑

headerValues:headerValues是Map类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。

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

initParam:initParam是Map类型。它对应web.xml文件中的参数。

3.5 Cookie相关内置对象

cookie:cookie是Map类型,其中key是Cookie的名字,而值是Cookie对象本身。

编辑

3.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();

EL函数库

1 什么EL函数库

EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是由JSTL添加的。

EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库。

EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)}会输出3,即字符串的长度。

2 导入函数库

因为是第三方的东西,所以需要导入。导入需要使用taglib指令!

<%@ taglib prefix="fn" uri="%>

3 EL函数库介绍

String toUpperCase(String input):String toLowerCase(String input):int indexOf(String input, String substring):boolean contains(String input, String substring):boolean containsIgnoreCase(String input, String substring):boolean startsWith(String input, String substring):boolean endsWith(String input, String substring):String substring(String input, int beginIndex, int endIndex):String substringAfter(String input, String substring):hello-world, “-“substringBefore(String input, String substring):hello-world, “-“String escapeXml(String input):把字符串的“>”、“<”。。。转义了!String trim(String input):String replace(String input, String substringBefore, String substringAfter):String[] split(String input, String delimiters):int length(Object obj):可以获取字符串、数组、各种集合的长度!String join(String array[], String separator):

<%@taglibprefix="fn"uri="style="color: #bf5f3f;">%>

String[] strs = {"a", "b","c"};

List list = new ArrayList();

list.add("a");

pageContext.setAttribute("arr", strs);

pageContext.setAttribute("list", list);

%>

${fn:length(arr) }<br/><!--3-->

${fn:length(list) }<br/><!--1-->

${fn:toLowerCase("Hello") }<br/><!-- hello -->

${fn:toUpperCase("Hello") }<br/><!-- HELLO -->

${fn:contains("abc", "a")}<br/><!-- true -->

${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->

${fn:contains(arr, "a")}<br/><!-- true -->

${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->

${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->

${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->

${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->

${fn:join(arr, ";")}<br/><!-- a;b;c -->

${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->

${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->


${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->

${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->

${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->

${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->

${fn:trim("     a b c     ")}<br/><!-- a b c -->

${fn:escapeXml("<html></html>")}<br/><!-- <html></html> -->

4 自定义EL函数库

写一个类,写一个有返回值的静态方法;编写eduask.tld文件,可以参数fn.tld文件来写,把eduask.tld文件放到/WEB-INF目录下;在页面中添加taglib指令,导入自定义标签库。

EduaskFuncations.java

package cn.eduask.el.funcations;


publicclass EduaskFuncations {

   publicstatic String test() {

      return"上海软件自定义EL函数库测试";

   }

}

eduask.tld(放到classes下)

<?xmlversion="1.0"encoding="UTF-8"?>


<taglibxmlns="data-id="p838747a-stAPPorX">  xmlns:xsi="data-id="p838747a-cr7DgL4Y">  xsi:schemaLocation="data-id="p838747a-NezJ4XRC">  version="2.0">

   

  <tlib-version>1.0</tlib-version>

  <short-name>eduask</short-name>

  <uri>​style="color: #008080;"></uri>


  <function>

    <name>test</name>

    <function-class>cn.eduask.el.funcations.EduaskFuncations</function-class>

    <function-signature>String test()</function-signature>

  </function>

</taglib>

index.jsp

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@taglibprefix="edu"uri="/WEB-INF/eduask.tld" %>


<!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <body>

  <h1>${edu:test() }</h1>

  </body>

</html>

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MDUI- 轻量级 Material Design 前端框架
下一篇:neo.mjs - 一个webworker驱动的 UI 框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~