9、JavaEE---EL与JSTL

目录

什么是EL

(2)EL的基本格式:

EL表达式特点:

 (3)EL的功能:

(4)EL对出错信息的处理

(5) 自动转换类型

EL语法

基本运算符

EL中的常量

(1)点号.和方括号[ ]

 点号.:通常用于访问对象的属性

方括号[]:通常用于访问数组和集合的元素

EL运算符

(2) 算术运算符(5个)

(3) 关系运算符(6个)

(4 )逻辑运算符(3个)

(5) empty 运算符与条件运算符

表达式语言的内置对象(隐含对象)(11个)

JSTL 

(1)什么是JSTL?

(2)使用JSTL的好处:

(3)JSTL提供的标签库主要分为五大类:

 配置JSTL

JSTL核心标签库

表达式操作 

1、

2、

 3、

4、 

流程控制:

1、 条件判断

2、多分支判断:类似于switch语句

3、迭代操作:

for循环

 :

4、URL标签

函数标签库

contains函数

 containsIgnoreCase函数

endsWith函数

indexOf函数

join 函数

length函数

split 函数

startsWith函数

substring函数

toLowerCase函数

toUpperCase函数

trim函数


什么是EL

(1)问题的提出:

在JSP中嵌入大量Java代码实现业务逻辑,从长远来看,维护起来很困难,所以,从JSP2.0起引入了表达式语言(EL)。EL的最大特点是语法简单,使用方便,可以在模板中直接使用或给标签的属性赋值,能有效减少JSP脚本的数量。EL语句中的表达式值会被直接送到浏览器显示。通过page 指令的isELIgnored 属性来说明是否支持EL表达式。isELIgnored 属性值为false 时,JSP页面可以使用EL 表达式;isELIgnored 属性值为 true 时,JSP 页面不能使用EL表达式(被当成字符串直接输出)。isELIgnored 属性值默认为false。

(2)EL的基本格式:

${表达式}

例:注册信息显示

//disp1.jsp  使用JSP脚本、表达式等
<% request.setCharacterEncoding("GBK"); %>
用户姓名:<%=request.getParameter("name")%><p>
用户密码:<%=request.getParameter("password")%> <p>
确认密码:<%=request.getParameter("rpassword")%> <p>
<%
	String[] hobby = request.getParameterValues("hobby");
	String hobbies = "";
	for (int i = 0; i < hobby.length; i++)
		hobbies = hobbies + " " + hobby[i];
%>
业余爱好:<%=hobbies%>
//disp2.jsp  使用JSP的表达式语言(EL)等
<%  request.setCharacterEncoding("GBK");  %>
用户姓名:${param.name} <p>
用户密码:${param.password} <p>
确认密码:${param.rpassword} <p>
业余爱好:${paramValues.hobby[0]} ${paramValues.hobby[1]} ${paramValues.hobby[2]} ${paramValues.hobby[3]}

功能相同, 代码更简洁

EL表达式特点:

  • 可以访问JSP的内置对象(pageContext、request、session 以及application等)
  • 简化了对 JavaBean 以及集合的访问方式
  • 可以对数据类型自动转换。
  • 可以通过各种运算符进行运算。
  • 可以使用自定义函数实现更加复杂的业务功能
     

 (3)EL的功能:

精确访问“作用域变量”(即属性Attribute);

简单的JavaBean访问语法;

集合元素的简洁表示;

对request参数和Cookie的简单访问;

简单的运算符;

条件表达式求值;

自动类型转换;

使用空值代替NullPointerException。

(4)EL对出错信息的处理

EL为JSP页面的错误处理提供了比较友好的处理方式:不提供警告,只提供默认值和错误,默认值是空字符串,错误就是抛出一个异常。EL的错误处理机制具体如下。

  • 对于null值直接以空字符串显示,而不是null,运算时也不会发生错误或空指针异常。所以在使用EL访问对象的属性时,无须判断对象是否为null对象。
  • 在EL中访问一个存在对象的不存在属性,EL 表达式会抛出 PropertyNotFoundException异常。

例如: user对象不存在,${user}返回为空(null),不会抛出异常。 但如果对象存在,而属性不存在,则抛出异常。

(5) 自动转换类型

例如:${param.count + 20},若表单传来count的值为10时,那么上面的结果为30。

EL语法

基本运算符

EL中的常量

EL 表达式中的常量包括布尔、整型、浮点数、字符串以及 NULL 等,例如

${true}、${200}、${16.7}、${"hello"}、${null}

(1)点号.和方括号[ ]

作用:实现对相应数据存取的运算符:.(点操作)和[ ]操作

EL 使用“[ ]”和“.”操作符来访问数据,主要使用 EL 获取对象的属性,包括获取JavaBean的属性值、获取数组中的元素以及获取集合对象中的元素。

 点号.:通常用于访问对象的属性

获取JavaBean属性值

例如:访问 user 对象的userName属性

EL.运算符:

${user.userName}
//或者
${user["age"]}

JSP标签:

<jsp:getProperty property=”userName” name=”user”/>

JSP脚本:

<%=user.getUserName%>

再如:获取user 对象的userName的firstName属性值

EL.运算符:

user${user.userName.firstName}

JSP脚本:

user.getUserName().getFirstName();

方括号[]:通常用于访问数组和集合的元素

获取数组中的元素

例如,在sevlet中有一段代码 

String dogs[]={"lili","huahua","gougou"};
request.setAttribute("array",dogs);

EL:

${array[0]}
${array[1]}
${array[2]}

获取集合对象中的元素

 servlet中代码:

ArrayList<UserBean> users=new ArrayList<UserBean>();
UserBean ub1=new UserBean("zhang",20);
UserBean ub2=new UserBean("zhao",50);
users.add(ub1);
users.add(ub2);
request.setAttribute("array",users);

其中,UserBean有两个属性:name 和age,那么在JSP页面中可以使用 EL 取出 UserBean中的属性,代码如下:

${array[0].name}   ${array[0].age} 
${array[1].name}   ${array[1].age} 
${paramValues.hobby[0]}

对于实现了java.util.Map 接口的集合,方括号运算符使用关联的键来查找存储在映射中的值

通常,点号.和方括号[ ]可以互用: 例如:${user.sex}等同于${user["sex"]} 也可以混用,

如:${shoppingCart[0].price}

不过,在下列两种情况下,两者之间存在差异:

1、当要存取的属性名中包含一些特殊字符(非字母或数字符号),只能使用 [ ],

如:${user.My-Name }写法不正确,应改为:${user["My-Name"] }

2、动态取值时只能使用[],例如:

${user[data]},此时data 是一个变量,假若data的值为“sex”时,那么上一语句等同于${sessionScope.user.sex};

点号( .) 无法动态取值

EL运算符

(2) 算术运算符(5个)

包括: +、-、*、/(或div)和 %(或 mod)

(3) 关系运算符(6个)

包括: ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge)

(4 )逻辑运算符(3个)

包括: &&(或 and)、||(或 or)和 !(或 not)

(5) empty 运算符与条件运算符

empty运算符用于检测一个值是否为null

例如,变量A不存在,则$empty A}返回的结果为true

条件运算符:${A?B:C}

表达式语言的内置对象(隐含对象)(11个)

(1)pageContext: 与JSP中的pageContext对象相同,可获取其它对象         

(2)与范围有关的隐含对象(4个): 

与作用范围有关的 EL 隐含对象有 pageScope、requestScope、sessionScope 和applicationScope,分别可以获取JSP 内置对象 pageContext、request、session 和application中的数据。如果在 EL中没有使用隐含对象指定作用范围,则会依次从page 、request、session、application 范围查找,找到就直接返回,不再继续找下去:如果查找所有范围都没有找到就返回空字符串。获取数据的格式如下: 

${EL隐含对象.关键字对象.属性}
//或
${EL隐含对象.关键字对象}

例如:

<jsp:useBean id="users" class="bean.UseBean" scope="page"/>
<jsp:setProperty name="users" property="name" value="EL隐含对象"/>
name:${pageScope.user.name}

再如:

servlet中的代码:

ArrayList<UserBean> users=new ArrayList<UserBean>();
UserBean ub1=new UserBean("zhang",20);
UserBean ub2=new UserBean("zhao",50);
users.add(ub1);
users.add(ub2);
request.setAttribute("array",users);

其中,UserBean有两个属性:name和age,那么在request 有效的范围内可以使用EL取出UserBean的属性,代码如下:

${requestScope.array[0].name}  ${requestScope.array[0].age}
${requestScope.array[1].name}  ${requestScope.array[1].age}

 它们基本上就与和JSP的pageContext、request、session和application一样,但是,这4个隐含对象只能用来取得范围属性值,却不能取得其他相关信息

(3)与输入(请求参数)有关的隐含对象(2个):

 param:按名称存储请求参数单一值的 Map 类

paramValues:请求参数的所有值构成的 String 数组

例如:

${param.name} 相当于:request.getParameter(“name”)

${paramValues.hobby[0]}

${paramValues.hobby[1]}

${paramValues.hobby[2]}

相当于:request.getParameterValues(“hobby[0]”)

request.getParameterValues(“hobby[1]”)

例题:

编写一个 Servlet,在该 Servlet 中使用 request 对象存储数据,然后从该 Servlet转发到 showjsp 页面,在 showjsp 页面中显示 request 对象的数据。首先,运行 Servlet,在E地址栏中输入“http://localhost:8080/ch9/saveServlet”,程序运行结果如图所示。

SaveServlet.java
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "SaveServlet", value = "/SaveServlet")
public class SaveServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String names[]={"zhao","qian","sun","li"};
        request.setAttribute("name",names);
        RequestDispatcher dis=request.getRequestDispatcher("show.jsp");
        dis.forward(request,response);
    }
}

show.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
从servlet转发过来的request内置对象的数据如下:<br>
${requestScope.name[0]}<br>
${requestScope.name[1]}<br>
${requestScope.name[2]}<br>
<%--requestScope可以省略--%>
${name[3]}<br>
</body>
</html>

(4)获取web应用程序初始参数的隐含对象:initParam

例如:${initParam.userid} 相当于

String userid = (String)application.getInitParameter(“userid”); 用来获得名为userid的web上下文参数

(5)获取Cookie对象的隐含对象:cookie 

如:要取得cookie中有一个名color的值,可以使用${cookie.color}来获得 

(6)与请求头有关的对象(2个) 

header:用于获取请求头的属性值

headerValues:用于获取请求头的属性值,属性值为数组

EL数据访问:

访问JavaBean基本语法:${bean.property}

访问集合基本语法: ${collection[elementName]} 

JSTL 

(1)什么是JSTL?

JSTL全名为JSP标准标签库(Standard Tag Library)

JSTL 标准标签库由5个不同功能的标签库组成,包括 Core I18N、XML、SQL和Functions,

JSTL 是标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML 文件剖析、数据库查询及国际化和文字格式标准化等应用

(2)使用JSTL的好处:

简化JSP和WEB程序的开发,可以大大减少JSP中脚本代码的数量,甚至可以不用脚本代码;

提供一组标准标签,可用于编写各种动态 JSP 页面,弥补EL和标准动作的不足。

(3)JSTL提供的标签库主要分为五大类:

JSTL

前置名称

URI

范例

核心标签库

c

http://java.sun.com/jsp/jstl/core

<c:out>

I18N格式标签库

fmt

http://java.sun.com/jsp/jstl/fmt

<fmt:formatDate>

SQL 标签库

sql

http://java.sun.com/jsp/jstl/sql

<sql:query>

XML 标签库

xml

http://java.sun.com/jsp/jstl/xml

<xml:forBach>

函数标签库

fn

http://java.sun.com/jsp/jstl/functions

<fn:split>

 配置JSTL

1、添加JSTL的依赖(根据需要)

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.5</version>
        </dependency>
   
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>

2、页面中引用库文件:

使用 JSTL 必须使用 taglib 指令,taglib 指令的作用是声明 JSP 文件使用的标签库,同时引入该标签库,并指定标签的前缀。

以声明核心标签库 core 为例,其基本语法如下: 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

如果使用 Functions函数标签库首先需要在JSP页面中使用taglib 标记定义前缀与uri 引用,代码如下:

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

JSTL核心标签库

格式:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:xxx   属性1=“值1” …  属性k=“值k”  …>

说明:uri的值可在项目依赖jar包taglibs-standard-impl-1.2.5.jar的META-INF的c.tld文件中复制

 核心标签库主要有:

  • 表达式操作
  • 流程控制
  • 迭代操作
  • URL 操作

表达式操作 

 包括4个标签:<c:out>、<c:set>、<c:remove>、<c:catch>

1、<c:out>

功能:主要用来显示数据的内容,同 <%=表达式 %>或${表达式}类似

例: Hello ! <c:out value="${username}" />

格式:

格式1:没有标签体  <c:out value=“value” [default=“默认值”] />

格式2:有标签体内容  <c:out value="value">defaultValue</c:out>

其中,value 值可以是一个EL 表达式,也可以是一个字符串,default 可有可无,当 value值不存在时,就输出defaultValue。例如:

<c:out value="${param.data}" default="没有数据"/>
<br>
<c:out value="${param.nothing}"/>
<br>
<c:out value="这是一个字符串"/>

  说明:

说明:default属性不能与标签体同时出现 

2、<c:set>

功能:设置各种web域属性或JavaBean的属性

1、设置作用域变量:

可以使用<c:set>在page、request、session、application 等范围内设置一个变量。

格式1:用 value属性设置指定scope 的 varName 变量值

<c:set value="value" var="varName" [scope="page|request|session|application"]/>

将value的值赋给变量varName 

<c:set value="zhao" var="userName" scope="session"/>

相当于

<% session.setAttribute("uaerName","zhao");%>

格式2:用标签体内容设置指定scope 的 varName 变量值

<c:set var=“varName” [scope=“ page|request|session|application ”]>
  标签体内容
</c:set>

设置JavaBean属性

 使用<c:set>设置JavaBean的属性时,必须使用target 属性进行设置

格式3:将 value 的值保存至 target 对象的属性中

< c:set value=“value” target=“对象名”  property="propertyName" />

将value 赋值给 target 对象(JavaBean 对象)的propertyName 属性。如果target 为 null或没有 set方法,则抛出异常。 

格式4:将标签体内容的数据保存至 target 对象的属性中

<c:set target=“对象名” property=“propertyName”>
   标签体内容
</c:set>

 3、<c:remove>

功能:移除某个变量

格式:

<c:remove var="varName" [scope="page|request|session|application "] />

如:

<c:remove var="msg" scope="session" />

相当于

<% session.removeAttribute("userName")%>

4、 <c:catch>

功能:捕获异常,并将异常信息储存起来

格式:

<c:catch [var="varName"] >
		欲捕获异常的部分
	</c:catch>

流程控制:

包括4个标签:<c:if>、<c:choose>、<c:when>、<c:otherwise>

1、<c:if> 条件判断

<c:if test="条件表达式">
    主题内容
</c:if>

其中,条件表达式可以是 EL 表达式,也可以是 JSP 表达式。如果表达式的值为 true,则会执行<c:if>的主体内容,但是没有相对应的<c:else>标签。如果想在条件成立时执行一块内容,不成立时执行另一块内容,则可以使用<c:choose>、<c:when>及<c:otherwise>标签 

格式1:没有标签体,如果条件为true,就给变量赋值

<c:if test=“条件"  var="varName “ [scope="page|request|session|application"]/>

格式2:有标签体内容,若条件为true,则输出具体内容

<c:if test=“条件"  [var="varName"][scope="page|request|session|application"]>
	具体内容
</c:if>

注意:if标签无else部分

2、多分支判断:类似于switch语句

<c:choose>、<c:when>及<c:otherwise>标签 实现if/else-if/else语句的作用 

包括:<c:choose>、 <c:when> 和 <c:otherwise>

格式:

<c:choose>
    <c:when test="条件表达式1">
        主题内容1
    </c:when>
    <c:when test="条件表达式2">
        主题内容2
    </c:when>
    <c:otherwise>
        表达式不正确时,执行的主体内容
    </c:otherwise>
</c:choose>

说明:

<c:choose>只能用作 <c:when> 和 <c:otherwise> 的父标签;

<c:otherwise>放在最后位置,当所有 <c:when> 的条件都没有成立时,则执行 <c:otherwise>。

3、迭代操作:

包括2个标签:<c:forEach>、<c:forTokens>

<c:forEach>for循环

功能:用于对一个集合中的元素进行循环迭代操作,或按指定的次数重复迭代执行标签体中的内容

格式1:在集合对象中迭代

<c:forEach  [var=“变量名”] items=“集合名” [varStatus=“迭代信息状态”] [begin=“起始索引"] [end=“终止索引”] [step=“步长"]>
	标签体内容
< /c:forEach>

例题:

 servlet代码:

ArrayList<UserBean> users=new ArrayList<UserBean>();
UserBean ub1=new UserBean("zhao",20);
UserBean ub2=new UserBean("qian",40);
UserBean ub3=new UserBean("sun",60);
UserBean ub4=new UserBean("li",80);
users.add(ub1);
users.add(ub2);
users.add(ub3);
users.add(ub4);
request.setAttribute("usersKey",users);

使用<c:forEach>循环:

<table>
    <tr>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    <c:forEach var="user" items="${requestScope.usersKey}">
        <tr>
            <td>${user.name}</td>
            <td>${user.age}</td>
        </tr>
    </c:forEach>
</table>

forEach标签各属性含义

 格式2:按指定次数进行迭代

<c:forEach  [var=“变量名”]  [varStatus=“迭代信息状态”] begin=“起始索引“ end=“终止索引” [step=“步长"]>
	标签体内容
< /c:forEach>

有些情况下,需要为<c:forEach>标签指定 begin、end、step 和 varStatus 属性。

  • begin为迭代时的开始位置,默认值为 0;
  • end 为选代时的结束位置,默认值是最后一个元素;
  • step为选代步长,默认值为 1;
  • varStatus 代表迭代变量的状态,包括count(迭代的次数)index(当前选代的索引,第一个索引为 0)、first (是否是第一个选代对象)和last(是否是最后个迭代对象)。

例如:

<table border="1">
  <tr>
    <th>Value</th>
    <th>Square</th>
  </tr>
  <c:forEach var="x" varStatus="status" begin="0" end="10" step="2">
    <tr>
      <td>${x}</td>
      <td>${x*x}</td>
      <td>${status.index}</td>
    </tr>
  </c:forEach>
</table>

  

说明:

  • 若有begin 属性,begin 必须大于等于 0
  • 若有end 属性,必须大于begin
  • 若有step 属性,step 必须大于等于0

<c:forEach>还提供varStatus 属性:主要用来存放现在指向成员的相关信息;

varStatus属性还有另外四个属性:

 <c:forTokens>:

用来浏览一字符串中所有的成员

<c:forTokens>用于迭代字符串中由分隔符分隔的各成员,它是通过 java.util.String.Tokenizer 实例来完成字符串的分隔,属性items和delims作为构造StringTokenizer 实例的参数。语法格式如下:

<c:forTokens items=“迭代对象“ delims=”分隔符" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
	标签体内容
</c:forTokens>

例如:

<c:forTokens items="chenheng:lulinlin:liuhaiyan" delims=":" var="name">
  ${name}<br>
</c:forTokens>

  

 说明:分隔符可是一个或多个

4、URL标签

 JSTL中提供了<c:url>、<c:redirect>、<c:import>等与URL操作相关的标签。

<c:url>

<c:urI>标签用于在JSP页面中构造一个URL地址,其语法格式如下:

<c:url value="指定要构造的URL"
        [var="varName"] [scope="{page|request|session|application}"]
        [context="context"]>
        [<c:param name="paramName" value="paramValue"/>]
</c:url>

 其中,

  • value 指定要构造的URL;
  • var 指定构造的URL保存到范围域中的属性名称;
  • scope指定构造的URL结果保存到哪个范围域中;
  • context指定URL地址所属的同一Web容器下的 Web 应用上下文;
  • <c:param标签向指定的URL地址传递参数;
  • [ ]表示可选。

示例代码如下:

<c:url value="goto.jsp?username=chenheng&pwd=123" var="myURL"/>
<a href="${myURL}">去看看</a>
//或

<c:url var="/goto.jsp" var="myURL" context="/ch9" scope="page">
  <c:param name=" username" value="chenheng"/>
  <c:param name="pwd" value="123"/>
</c:url>
<a href="${myURL}">去看看</a>

上述示例代码中,如果使用context 属性指定应用上下文,则value 属性值必须是以“/”开头的相对地址。

<c:redirect>

<c:redirect>标签用于执行 response.sendRedirect()方法的功能,将当前访问请求重定向到其他资源,其语法格式如下: 

<c:redirect url="重定向的URL地址" [context="context"]>
        [<c:param name="paramName" value="paramValue"/>]
</c:redirect>

其中,url指定重定向的目标资源的URL地址:

context 指定重定向地址所属的同一 Web容器下的 Web应用上下文;

<c:param>标签向指定的URL 地址传递参数;表示可选。示例代码如下:

<c:url value="goto.jsp?username=chenheng&pwd=123" var="myURL"/>
<c:redirect url="${myURL}"/>

<c:import>

<c:import>标签用于在JSP页面中导入一个URL地址指向的资源内容,可以是一个静态或动态文件,可以是当前应用或任何其他资源。语法格式如下:

<c:import url="url"
       [var="varName"] [scope="{page|request|session|application}"]
        [context="context"] [charEncoding="charEncoding"]>
        [<c:param name="paramName" value="paramValue"/>]
</c:import>

 其中,

  • url 指定要导入资源的URL地址;
  • var 指定导入资源保存到范围域中的属性名称;
  • scope指定导入资源保存到哪个范围域中(默认为 page);
  • context 指定导入资源所属的同一 Web容器下的 Web应用上下文(默认为当前应用);
  • charEncoding 指定将导入资源内容转换成字符串时所使用的字符集编码;
  • <c:param>标签向指定的导入资源文件传递参数;
  • [ ]表示可选。

要想在某页面中导入headjsp 并向 headjsp 传递参数id,示例代码如下:

<c:import url="head.jsp?id=1"/>
//或

<c:import url="/head.jsp" context="/ch9" var "importURL" scope="page" charEncoding="UTF-8">
    <c:param name="id" value="1"/>
</c:import>

<c:import>标签与<jsp:include>动作指令功能类似,但后者只能包含当前应用下的文件资源,而<c:import>标签可以包含任何其他应用或网站下的资源,例<c:importurl="http://www.sohu.com"/>

函数标签库

在JSP页面中,调用JSTL中的函数时,需要使用 EL表达式,调用语法格式如下:

${fn:函数名(参数1,参数2,...)}

contains函数

contains函数功能是判断一个字符串中是否包含指定的子字符串。如果包含,则返回:true,否则返回false。其定义如下,

contains(string,substring)

//该函数调用

${fn:contains("I am studying","am")}

结果返回true 

 containsIgnoreCase函数

containsIgnoreCase函数与contains函数功能相似,但判断是不区分大小写的。

containsIgnoreCase(string, substring)

 调用代码

${fn:containsIgnoreCase("I AM studying","am")}

结果返回true 

endsWith函数


endsWith函数功能是判断一个字符串是否以指定的后缀结尾。

endswith(string, suffix)

调用:

${(fn:endsWith("I AM studying","am")}

结果为false

indexOf函数


indexOf 函数功能是返回指定子字符串在某个字符串中第一次出现时的索引,找不到将返回-1。

indexOf(string substring)

调用

${fn:indexOf("I am studying","am")}

结果返回2

join 函数


join 函数功能是将一个 String 数组中的所有元素合并成一个字符串,并用指定的分隔符分开。

join(array,separator)

例如,假设一个String数组my,它有3个元素:“I”“am”和“studying”,那么,下列EL表达式:

${fn:join(my,",")}

将返回“I,am,studying”

length函数


length函数功能是返回集合中元素的个数,或者字符串中的字符个数

length(input)

调用

${fn:length("aaa")}

结果返回3

split 函数


split函数功能是将一个字符串,使用指定的分隔符 separator 分离成一个子字符串数组。

split(stringrseparator)

调用

<c:set var="my" value="$(fn:split('I am studying',' ')}"/>
<c:forEach var="myArrayElementn items="S(my }>
    $(myArrayElement}<br>
</c:forEach>

startsWith函数


startsWith函数功能是判断一个字符串是否以指定的前缀开头。

startsWith(string,prefix)

调用

${(fn:startsWith("I AM studying","am")}

结果返回false

substring函数

substring函数功能是返回一个字符串的子字符串

substring(string,begin, end)

调用 

${(fn:substring("abcdef",1,3)}

结果返回bc

toLowerCase函数


toLowerCase函数功能是将一个字符串转换成它的小写版本

toLowerCase(string)
${(fn:toLowerCase("I AM studying")}

上述EL表达式将返回“i am studying

toUpperCase函数


toUpperCase函数功能与toLowerCase函数功能相反,

trim函数


trim函数功能是将一个字符串开头和结尾的空格去掉。

trim(string)
${fn:trim("  I AM studying  ")}

上述EL表达式将返回“I AM studying”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值