EL表达式

 

EL表达式运算

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>EL表达式运算</h1>
数值常量:${10}<br/>
字符串常量:${'name'},${null},${""}<br/>
变量:${name}<br/>
四则运算:${3+4},${7-9},${4*3.3},${10/3},${10 div 4.5}(这里小数除法的结果是浮点数,要想化成整数需结合jstl)<br/>
等于:${4==3},${4=="4"},${name=="name"},${"name"=="name"},${4 eq 4}<br/>
不等于:${4!=3},${4 ne 3}<br/>
取余数:${10%3},${10 mod 3}<br/>
小于:${3<4},${3 lt 4}<br/>
大于:${4>3},${4 gt 3}<br/>
小于等于:${3<=4},${3 le 4}<br/>
大于等于:${4>3},${4 ge 3}<br/>
逻辑与:${4>0 && 3<9},${5=='5' and 5==5}<br/>
逻辑或:${4>0||6<0},${true or false}<br/>
逻辑非:${!true},${not true},${!""},${! null}<br/>
<%
    int[] a=new int[0];
%>
判空:${empty ""},${empty null},${empty a}<br/>
判非空:${empty not ""},${not empty ""},${! empty null},${empty !""}<br/>
</body>
</html>

运行效果:

EL表达式运算
数值常量:10
字符串常量:name,,
变量:
四则运算:7,-2,13.2,3.3333333333333335,2.2222222222222223(这里小数除法的结果是浮点数,要想化成整数需结合jstl)
等于:false,true,false,true,true
不等于:true,true
取余数:1,1
小于:true,true
大于:true,true
小于等于:true,true
大于等于:true,true
逻辑与:true,true
逻辑或:true,true
逻辑非:false,false,true,true
判空:true,true,true
判非空:false,false,false,false

 

 

EL表达式内置对象

在EL表达式中,无需创建就可以使用的称为内置(隐含,隐藏对象)。在EL表达式中一共有11个内置对象,它们都与map相似。

1.param

param是Map<String,String>类型,用来获取参数值,与request.getParameter()方法类似。

<html>
<head>
    <title>param内置对象</title>
</head>
<body>
<form>
    <input type="text" name="username" />
    <input type="text" name="password" >
    <input type="submit">
</form>
<%
    String name=request.getParameter("username");
    String pwd=request.getParameter("password");
%>
request.getParameter获取:<%=name%>
<%=pwd%><br/>
EL表达式获取:${param.username}
${param.password}
</body>
</html>

运行效果:

1.

2.表单输入

3.提交

可看到,当变量为null时,request.getParameter会把null输出,而EL表达式则显示的是空字符串。

EL表达式在获取Map值或者Bean的属性值时,可以用“点”的方法,也可以使用“下标”的方法,如${param.name}和${param['name']}效果相同。但是如果Map的键或者Bean的属性名包含特殊符号如“_”,“-”,那么就必须使用下标,如${param.user_name}。

2.paramValues

paramValues是Map<String,String[]>类型,当一个参数名称对应多个数值时可以使用它。

<html>
<head>
    <title>param内置对象</title>
</head>
<body>
<form>
    <input type="text" name="interest" />
    <input type="text" name="interest" >
    <input type="submit">
</form>
${paramValues.interest[0]}
${paramValues.interest[1]}
</body>
</html>

运行结果:

1.填写表单

2.点击提交

3.header

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

<html>
<head>
    <title>param内置对象</title>
</head>
<body>
${header.host}<br/>
${header.cookie}
</body>
</html>

运行结果:

4.headerValues

headerValues是Map<String,String[]>类型,当一个请求头名称对应多个值时可以使用该对象。

5.initParam

initParam是Map<String,String>类型,用来获取上下文初始化参数,它对应web.xml中的<context-param>中的参数。

<html>
<head>
    <title>param内置对象</title>
</head>
<body>
${initParam.name}
</body>
</html>

web.xml: 

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <context-param>
        <param-name>name</param-name>
        <param-value>田喜碧</param-value>
    </context-param>
</web-app>

 运行结果:

6.cookie

cookie是<String,Cookie>类型,其中key是Cookie的名字,值是Cookie对象本身。

<html>
<head>
    <title>param内置对象</title>
</head>
<body>
<%
    response.addCookie(new Cookie("hebe","12345"));
%>
${cookie.hebe}<br/>
${cookie.hebe.name}<br/>
${cookie.hebe.value}
</body>
</html>

运行结果:

说明:此处需要浏览器先访问一次jsp页面才会把cookie加进去,所以第二次访问才会显示结果。

 

域内置对象

使用EL表达式最为常见的就是获取域对象中保存的数据。例如${pageScope.xxx}表示获取在pageContext保存的数据,当然${pageScope['xxx']}也可以。

7.pageScope

pageScope是Map<String,String>类型,${pageScope.xxx}的功能相当于pageContext.getAttribute("xxx")。两者的区别在于前者在数据不存在时返回空字符串,后者返回null。

<%@ page import="test.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>param内置对象</title>
</head>
<body>
<%
    Person person=new Person("猪头",10);
    pageContext.setAttribute("person",person);
%>
${pageScope.person.name}
${pageScope.person.age}
</body>
</html>
package test;

public class Person {
    private String name;
    private int age;
    public Person() {
    }

    public Person(String name,int age) {
        this.name = name;
        this.age=age;
    }

    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;
    }
}

运行结果:

Person类中必须要提供setter以及getter方法,否则EL表达式无法访问到person对象的name和age属性。

8.requestScope

requestScope是Map<String,Object>类型,装载了request对象中的所有数据。

9.sessionScope

sessionScope是Map<String,Object>类型,装载了session对象中的所有数据。

10.applicationScope

applicationScope是Map<String,Object>类型,装载了application对象中的所有数据。

假如没有指定域,如${name},那么默认从pageScope开始找名为“name”的对象,然后依次是requestScope,sessionScope,applicationScope,找到即返回该对象。

11.pageContext

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值