EL表达式概述

本文详细介绍了JSP2.0中EL(Expression Language)表达式的使用方法,包括其基本语法、运算符、内置对象及如何关闭EL。同时,文章还探讨了EL函数库的使用和自定义EL函数库的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EL的作用

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

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

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

 

EL的格式

格式:${…}

例如:${1 + 2}

 

关闭EL

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

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

 

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

 

EL不显示null

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

 

EL内置对象

EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1个顶9个。

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

上面四个域对象,${xxx}为全域查找,${域名.xxx}:在指定域内查找

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

 

  •   param:对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。
  •   paramValues:对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。
<body>
    ${param.xxx }<br/>
    ${paramValues.yyy[0] }<br/>
    ${paramValues.yyy[1] }<br/>
</body>

  •   header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头
  •   headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头

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

<body>

  ${header.Host }

</body>

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

  • initParam:获取<context-param>内的参数!

在WEB-INF目录下的web.xml中

<context-param>

       <param-name>xxx</param-name>

       <param-value>XXX</param-value>

  </context-param>

  <context-param>

       <param-name>yyy</param-name>

       <param-value>YYY</param-value>

  </context-param>

在initParam.jsp文件 

<body>

  ${initParam.xxx }<br/>

  ${initParam.yyy }<br/>

</body>

  •   cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。
<body>

  <%

  response.addCookie(new Cookie("xxx","XXX"));

  %>

  ${cookie.xxx.name}<br/>

  ${cookie.xxx.value}<br/>

  ${cookie.JSESSIONID.name }<br/>

  ${cookie.JSESSIONID.value }<br/>

</body>

<body>

  ${pageContext.request.contextPath }<br/>

</body>

显示项目路径

  •  pageContext:它是PageContext类型!${pageContext.request.contextPath}

 

JavaBean 导航

对于javaBean对象,可以对getxxx(),直接通过.xxx来调用

<%

         Address address = new Address();

         address.setCity("北京");

         address.setStreet("西三旗");

        

         Employee emp = new Employee();

         emp.setName("李小四");

         emp.setSalary(123456);

         emp.setAddress(address);

        

         request.setAttribute("emp", emp);

  %>

<h3>使用el获取request域的emp</h3>

${requestScope.emp.address.street }<!-- request.getAttribute("emp").getAddress().getStreet() --><br/>

 

EL函数库

导入标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

  •          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):获取大串中,小串所在位置后面的字符串
  •          substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串
  •          String escapeXml(String input):把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):联合字符串数组!
<body>

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

   

  </body>

 

自定义EL函数库

写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!

public class ElFunctions {

     public static String eltld(){

        return "自定义EL库函数";

      }
}

 

在WEB-INF目录下创建一个tld文件(放在WEB-INF中可以防止项目发布时,用户访问)

el-tld.tld

<?xml version="1.0" encoding="UTF-8" ?>



<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

  version="2.0">



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

  <short-name>el</short-name>

  <uri>http://www.siacu.edu.cn</uri>

 

  <function>

   

    <name>eltld</name>

    <function-class>cn.edu.sicau.www.ElFunctions</function-class>

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

  </function>

</taglib>

在jsp页面中导入标签库

<%@ taglib prefix="el" uri="WEB-INF/el-tld.tld" %>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值