JSP系列教材 (十一)- EL表达式语言

EL表达式非常好用,好用的吓死人 ~ 

步骤1:取值
步骤2:作用域优先级
步骤3:JavaBean概念
步骤4:获取JavaBean的属性
步骤5:结合JSTL的<c:forEach
步骤6:取参
步骤7:eq

示例 1 : 取值

不同版本的tomcat是否默认开启对EL表达式的支持,是不一定的。

所以为了保证EL表达式能够正常使用,需要在<%@page 标签里加上isELIgnored="false"

使用EL表达式,非常简单

比如使用JSTL输出要写成

<c:out value="${name}" /> 



但是用EL只需要

${name}

取值

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" isELIgnored="false"%>

  

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

  

<c:set var="name" value="${'gareen'}" scope="request" />

  

通过标签获取name: <c:out value="${name}" /> <br>

通过 EL 获取name: ${name}

示例 2 : 作用域优先级

EL表达式可以从pageContext,request,session,application四个作用域中取到值,如果4个作用域都有name属性怎么办? 

EL会按照从高到低的优先级顺序获取 
pageContext>request>session>application

作用域优先级

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" isELIgnored="false"%>

  

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

  

<c:set var="name" value="${'gareen-pageContext'}" scope="page" />

<c:set var="name" value="${'gareen-request'}" scope="request" />

<c:set var="name" value="${'gareen-session'}" scope="session" />

<c:set var="name" value="${'gareen-application'}" scope="application" />

  

4个作用域都有name,优先获取出来的是 : ${name}

示例 3 : JavaBean概念

EL可以很方便的访问JavaBean的属性,那么JavaBean是什么呢? 

JavaBean的标准
1. 提供无参public的构造方法(默认提供)
2. 每个属性,都有public的getter和setter
3. 如果属性是boolean,那么就对应is和setter方法

比如示例代码中的Hero类,默认提供了一个无参的public的构造方法。 同时每个属性都有getter和setter

package bean;

public class Hero {

    public int id;

    public String name;

    public float hp;

    public int damage;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public float getHp() {

        return hp;

    }

    public void setHp(float hp) {

        this.hp = hp;

    }

    public int getDamage() {

        return damage;

    }

    public void setDamage(int damage) {

        this.damage = damage;

    }

     

}

示例 4 : 获取JavaBean的属性

获取JavaBean的属性,只需要通过.符号操作就可以了。

像这样 ${hero.name} ,就会自动调用getName方法了

注: 如果属性是boolean类型,那么就会自动调用isXXX方法了

获取JavaBean的属性

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" isELIgnored="false" import="bean.*"%>

  

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

  

<%

    Hero hero =new Hero();

    hero.setName("盖伦");

    hero.setHp(616);

     

    request.setAttribute("hero", hero);

%>

  

英雄名字 : ${hero.name} <br>

英雄血量 : ${hero.hp}

示例 5 : 结合JSTL的<c:forEach

EL还可以结合  JSTL的<c:forEach 使用,进一步简化代码

原代码中的 

<c:out value="${hero}" /> 


可以简写为

${hero}

结合JSTL的<c:forEach

<%@ page language="java" contentType="text/html; charset=UTF-8"

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

  

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

  

<%

    List<String> heros = new ArrayList<String>();

    heros.add("塔姆");

    heros.add("艾克");

    heros.add("巴德");

    heros.add("雷克赛");

    heros.add("卡莉丝塔");

    request.setAttribute("heros",heros);

%>

  

<table width="200px" align="center" border="1" cellspacing="0">

<tr>

    <td>编号</td>

    <td>英雄</td>

</tr>

    

<c:forEach items="${heros}" var="hero" varStatus="st"  >

    <tr>

        <td>${st.count}</td>

        <td>${hero}</td>

    </tr>

</c:forEach>

</table>

示例 6 : 取参

EL表达式还可以做到request.getParameter("name") 这样的形式获取浏览器传递过来的参数
先把jstl.jsp代码改为如例所示,然后访问如下地址

http://127.0.0.1/jstl.jsp?name=abc


可以观察到获取了参数 name

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%>

${param.name}

示例 7 : eq

进行条件判断,大大简化了 JSTL的 c:if 和 c:choose 代码

如例,一行代码就能起到其他好几行代码的效果

${killNumber ge 10"超神":"还没超神" }



例子中讲的是大于等于,除此之外的其他用法如下:
eq相等 ne、neq不相等,
gt大于, lt小于
gt大于, lt小于
gte、ge大于等于  
lte、le 小于等于  
not非 mod求模  
is [not] div by是否能被某数整除  
is [not] even是否为偶数  
is [not] odd是否为奇

<%@ page language="java" contentType="text/html; charset=UTF-8"

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

  

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

<%

request.setAttribute("killNumber""10");

%>

c:if 的用法,运行结果:

<c:if test="${killNumber>=10}">

超神

</c:if>

<c:if test="${killNumber<10}">

还没超神

</c:if>

<br>

c:choose 的用法,运行结果:

<c:choose>

    <c:when test="${killNumber>=10}">

        超神

    </c:when>

    <c:otherwise>

        还没超神

    </c:otherwise>

</c:choose>

<br>

EL表达式eq的用法,运行结果:

${killNumber ge 10"超神":"还没超神" }


更多内容,点击了解: https://how2j.cn/k/jsp/jsp-el/579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值