Javaweb之EL表达式

EL表达式概述

EL的作用

EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
最终目的 即:JSP不包含<% … %>、<%! … %>,以及<%= … %>
EL(Expression Language)是一门表达式语言,它对应JSP中<%=…%>。我们知道在JSP中,<%=…%>表达式会被输出,所以EL表达式也会被输出。

EL表达式基本用法

EL表达式的格式

格式:${}

关闭EL表达式

如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。该属性默认为fasle,表示支持EL表达式。
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:${1 + 2}。

EL基本运算符

运算符说明范例结果
+${1+2}3
-${2-1}1
*${3*2}6
/或div${17/5}3
%或mod取余${17 mod 5}2
==或eq等于${5 eq 5}true
!=或ne不等于${5ne5}false
<或it小于${5<3}false
gt或>大于${5>3}true
<=或le小于等于${3<=5}true
ge或>=大于等于${3》=5}false
&&或and${true&&true}true
双竖线或or${false or true}true
!或not${!true}false
empty是否为空${empty “”}true
a>b?1:2条件运算符${a>b?true;false}

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

EL不显示null

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

EL表达式操作数组,对象属性和Map

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

EL内置对象

EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
* pageScope(注意:pageContext)
* requestScope
* sessionScope
* applicationScope
* param;
* paramValues;
* header;
* headerValues;
* initParam;
* cookie;
* pageContext。

域相关内置对象

域内置对象一共有四个:
* pageScope: pageScope.namepageContext.getAttribute(name)requestScope {requestScope.name}等同与request.getAttribute(“name”);
* sessionScope: sessionScope.namesession.getAttribute(name)applicationScope {applicationScope.name}等同与application.getAttribute(“name”)。
如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。
定义一个JavaBean类Person.java

public class Person {
    private String name;
    private int age;
    private String sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

用EL表达式来获取

    <%
        pageContext.setAttribute("p1",new Person("张三",23,"male"));
    %>
    ${pageScope.p1.name}<br/>
    ${pageScope.p1.name}<br/>
    ${pageScope.p1.name}<br/>

全域查找:

上例中,${pageScope.p1.name}表示在page域中查找p1也可以直接写${p1.name}
表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为p1的属性。

请求参数相关内置对象

param和paramValues这两个内置对象是用来获取请求参数的。
* param:Map<String,String>类型,param对象可以用来获取参数,与request.getParameter()方法相同。
*
paramValues:paramValues是Map

请求头相关内置对象

header和headerValues是与请求头相关的内置对象:
* header: Map<String,String>类型,用来获取请求头。
如:${header.Host}
* headerValues:headerValuesMap<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象。

应用初始化相关内置对象

  • initParam:initParam是Map
    <context-param>
        <param-name>user_Name</param-name>
        <param-value>王五</param-value>
    </context-param>

用EL表达式获取user_Name的值

    ${initParam.user_Name}

Cookie相关内置对象

  • cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。
    设置cookie对象的属性值
<%
    response.addCookie(new Cookie("username","张胜男"));
    response.addCookie(new Cookie("password","123456"));
%>

获取cookie对象的属性值

${cookie.username.name}:${cookie.username.value}<br/>
${cookie.password.name}:${cookie.password.value}<br/>

pageContext内置对象

pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如java中pageContext.getRequest(),el中:${pageContext.request}。

EL表达式对应Java代码
${pageContext.request.queryString}pageContext.getRequest().getQueryString()//获取url中?后内容
${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表达式的pageContext内置对象,可以轻松获取相关信息。

EL函数库

什么EL函数库

  EL函数库是第三方对EL功能的扩展,这里学习的EL函数库是由JSTL添加的。
EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库。
  EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)}会输出3,即字符串的长度。

导入函数库

因为是第三方的东西,所以需要导入。导入需要使用taglib指令!
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

EL函数库介绍

注意:以下对于需要用数组等对象的函数,需要将该对象存在域空间中之后才可使用。
String toUpperCase(String input) :把字符串参数转换成大写,并返回String toLowerCase(String input):把字符串参数转换成小写,并返回;
int indexOf(String input, String substring):返回input中substring出现的索引位置;
boolean contains(String input, String substring):查看input中是否包含substring,包含返回true,否则返回false;
boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false;
boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false;
boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返 回true,否则就返回false;
String substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串;
String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串;
substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串;
String escapeXml(String input):把input中”<”,”>”,“&”,“’”,“””进行转义;
String trim(String input):去除input中的前后空格;
String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore 替换成substringAfter;
String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组;
int length(Object obj):可以获取字符串、数组、各种集合的长度!
String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串。
对于个别函数用法举例说明如下

  <body>
    ${fn:escapeXml("<div>王祖贤</div>")}</br>
    <% 
        String[] str={"a","b","c"};
        pageContext.setAttribute("str", str);
    %>

    ${fn:join(str,",")}
    ${fn:substringAfter("abc", "a")}</br>
  </body>

最终浏览器会输出

<div>王祖贤</div>
a,b,c bc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值