EL表达式

EL表达式

EL表达式基本语法

${expression}

expression:用于指定要输出的内容,可以是字符串也可以是由EL运算符组成的表达式。

EL表达式以{开头,所以网页中要显示{的时候需要转义,在前面加上”\”

EL表达式输出字符串 1234 {“数数1234”}

EL表达式的特点

  • EL表达式可以与JSTL结合使用,也可以与JavaScript语句结合使用。
  • EL表达式会自动进行类型转换,如果想通过EL输入两个字符串型数值(如number1和number2)的和,可以直接通过+号进行连接(如${number1+number2})
  • EL不仅可以访问一般变量,还可以访问javabean中的属性以及嵌套属性和集合对象。
  • 在EL表达式中可以执行算数运算,逻辑运算,关系运算和逻辑运算等操作。
  • 在EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的集成对象,通过他可以访问其他对象)
  • 在使用EL进行除法运算的时,如果0作为除数,则返回无穷大Infinity,而不返回错误。
  • 在EL中可以访问JSP的作用域(request、session、application以及page)
  • 扩展函数可以与Java类的静态方法映射。

与低版本的环境兼容-禁用EL

如果使用的Servlet 2.4/Jsp 2.0,就可以在页面中使用EL表达式,在Jsp2.0之前没有EL。为了与之前的兼容,JSP可以使用3种方法禁用EL

1.使用”\”符号 \${expression} 但该方法只是禁用页面一个或几个EL表达式的情况。

2.使用page指令<%@ page isELIgnored="布尔值"> 如果布尔值为true则禁用页面的EL表达式,该方法使用禁用一个页面的EL表达式。

3.在web.xml文件中配置元素

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
</jsp-config>

该方法适合禁用整个web应用的EL

EL保留的关键字

and eq gt instanceof div or le false empty not lt ge

EL的运算符和优先级

通过EL访问数据

通过EL提供的[]和.运算符访问数据,通常情况下,[]和.是等价的

//访问Javabean对象userInfo的id属性
${userInfo.id}
${userInfo[id]}

如果对象的属性名包括特殊的符号时,应当用[]如${userInfo[user-name]}

另外[]还可以用来访问数组或者List集合中的数据
${arrBook[0]}

通过EL表达式输出数组元素

<body>
<%
    String[] arr={"Javaweb","C#","Python"};
    request.setAttribute("language", arr);
    String[] arr1=(String [])request.getAttribute("language");
    for(int i=0;i<arr.length;i++){
    request.setAttribute("i1", i);
    %>
    ${i1}: ${language[i1]} 
    <!--注意EL表达式的前面的必须要在request范围内-->
    <% 
    }
    %>
 </body>

在上面的代码中,必须要将循环变量i保存到request的范围内的变量中,否则将不能正确的访问数组,这里不能直接使用Java代码片段中定义的变量i,也不能使用<%=i%>输出i。

在运行时,系统会先获取request变量的值,然后将输出数组内容的表达式转换为${language[索引]}

EL表达式获取List集合中的指定元素

    <body>
<%
    List<String> list=new ArrayList<String>();
    list.add("C");
    list.add("Java");
    list.add("Python");
    request.setAttribute("langList", list);
    for(int i=0;i<list.size();i++){
        request.setAttribute("i1", i);
    %>
    ${i1}: ${langList[i1]} 

    <% 
    }
    %>
</body>

EL表达式进行算术运算

EL表达式提供了加+、减-、乘*、除/或div、求余%或mod、

EL表示出0返回Infinity,与0求余将抛出异常java.lang.ArithmeticException:/by zero

EL中的+运算符与Java中的+不同,它不能实现两个字符串之间的连接,如果使用该运算符连接两个不可转换为数值型的字符串,将抛出异常;如果使用该+号连接两个可以转换为数值类型的字符串,EL将自动将这两个字符串转换为数值类型,再进行加法运算。

在EL中判断对象是否为空

在EL中判断对象是否为空,可以使用empty运算符来实现,该运算符是一个前缀运算符,即位于操作数前方,用来判断一个对象是否null或空。格式为${empty expression}

  <body>
<%
    request.setAttribute("user", "");
    request.setAttribute("user01", null);

 %>
 ${empty user}  //true
 ${empty user01} //true
</body>

一个变量或一个对象为null或为空代表的意义不同。null表示这个变量没有指定任何对象,而空表示这个变量所属的对象其内容为空,如空字符串,空数组,空List容器

与not连用表示非空${not empty user}

EL中的逻辑关系运算

关系运算符

==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge)

逻辑运算符

&&(and) ||(or) !(not)

EL表达式也遵循短路原则

EL中的条件运算

${条件表达式?表达式1:表达式2}

EL的隐含对象

为了获得web应用程序中的相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名操作。

在EL的隐含对象中,除了PageContext是JavaBean对象,对应于javax.servlet.jsp.PageContext类型外,其他隐含对象都位于java.util.Map类型,这些可以分为页面上下文对象,访问作用域对象,和访问环境信息的隐含对象。

页面上下文对象

页面上下文对象为pageContext,用于访问JSP内置对象(request、response、out、session、exception、page)但不能获取(application、config、pageContext)

${pageContext.request} ……

访问作用域范围的隐含对象

提供了4个pageScope、requestScope、sessionScope、applicationScope、

pageScope

用于返回包含page(页面)范围内的属性值的集合
,返回值为java.util.Map对象

requestScope

用于返回包含request(请求)范围内的属性值的集合

<%
    request.setAttribute("userName","aa");
%>
${requestScope.userName}
sessionScope

用户返回包含session(会话)范围内的属性值的集合

<%
    session.setAttribute("userName","aa");
%>
${sessionScope.userName}
applicationScope

用于返回包含application(应用)范围内的属性值的集合

<%
    application.setAttribute("userName","aa");
%>
${applicationScope.userName}

访问环境信息的隐含对象

param

用于获取请求参数的值,应用在参数值只有一个的情况下,应用param将返回一个字符串。

<input name="username" type="text">

${param.username}

如果是包含中文的话,在之前要用request设置编码

paramValues

如果一个请求包含参数名为多个值的时候(复选框),

<input type="checkbox" name="affect" value="C">
<input type="checkbox" name="affect" value="Java">
<input type="checkbox" name="affect" value="Python">
<input type="checkbox" name="affect" value="C++">

$(paramValues.affect[0])$(paramValues.affect[1])

在应用param和paramValues对象时,如果指定的参数不存在,则返回空字符串,而不是返回null

header和headerValues

用于获取HTTP请求的一个具体的header值${header["user-agent"]}

initParam

用于返回web.xml中的初始化参数

<param-name>name</init-param>
……

${initParam.name}

EL没有提供想cookie中保存值的方法,只提供了访问cookie的方法

<%
    Cookie cookie=new Cookie("user","shushu");
    response.addCookie(cookie);
%>

${cookie.user.value}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值