JavaWeb 07 EL

1、概念

Expressions Language,表达式语言
格式:${表达式}

其主要用于将域对象中的属性值输出到页面上

示例:
输出request域中的username属性值

 <%
   request.setAttribute("username", "tomcat");
 %>

 ${username}

2、特点

EL表达式默认是全域查找。
先从page域中查找,如果找不到;再在request域中查找,如果还找不到;再去session域中查找,如果再找不到;最后去application域中查找,如果还是没有,则返回空字符串(”“),不是null

3、精确查找

EL提供了四个Scope对象,这四个对象相当于将域对象中的域单独拿了出来。这样就可以获取指定域中的属性值

pageScope

获取page域中的属性值

requestScope

获取request域中的属性值

sessionScope

获取session域中的属性值

applicationScope

获取application域中的属性值

特殊的key对应的值的获取

${指定域[‘特殊key’]}
这里单引号、双引号都可以

示例:
获取page域中的”ab-cd”对应的属性值

 <%
   pageContext.setAttribute("ab-cd", "我是value");
 %>
 ${pageScope['ab-cd']}

4、获取JavaBean中的属性值

可以通过【对象.属性名】的方式来获取对应的JavaBean的属性值

Tips:
⑴ 通过此形式获取到的属性值,是通过调用JavaBean中的getXxx方法来获取到的
⑵ 如果获取到的属性值还是一个JavaBean的对象,则还可以继续获取其相应的属性值
⑶ 只要JavaBean中有getXxx方法,则可以直接使用
【对象.xxx】来获取对应的属性值。即将Xxx的首字母小写即可。在EL表达式中要写的是getXxx方法的xxx,这和属性值无关,没有相应的属性值也不会报错。但是没有相应的get方法就会报错:javax.el.PropertyNotFoundException: Property ‘xxx’ not found on type JavaBean的全类名

<h2>测试获取JaveBean的属性值</h2>

【Animal JavaBean】
 public class Animal {
    private String name;
    private Integer age;
    private String color;
    private Dog dog;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Animal() {
    }

    public Animal(String name, Integer age, String color, Dog dog) {
        this.name = name;
        this.age = age;
        this.color = color;
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Animal [name=" + name + ", age=" + age + ", color=" + color + ", dog=" + dog + "]";
    }

}

【Dog JavaBean】

public class Dog {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Dog() {
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog [name=" + name + ", age=" + age + "]";
    }

}

【JSP页面】

<%
    Animal animal = new Animal("动物", 4, "白色", new Dog("小白", 2));
    pageContext.setAttribute("animal", animal);
%>

<%-- 获取Animal对象 --%>
Animal:${animal}<br /><br />
<%-- 获取Animal对象的color属性 --%>
Animal的color:${animal.color}<hr />

<%-- 获取Dog对象 --%>
Dog:${animal.dog}<br /><br />
<%-- 获取Dog对象的name属性【因为animal的dog属性也是一个JavaBean(Dog类型)】 --%>
Dog的name:${animal.dog.name}

测试是否调用了get方法

在上面的Animal类中添加一个get方法:

 public String getWeight() {
 return "16";
 }

  在JSP页面中写:
   ${animal.weight}
  这样会在页面上显示16

 再新建一个Animal对象,并添加到域中,再调weight,结果还是16
   <%
      Animal a = new Animal("动物2", 2, "黑色", new Dog("小黑", 1));
      pageContext.setAttribute("a", a);
   %>
   ${a.weight}
  显示的结果还是16

由此可见:通过EL来获取JavaBean的属性值,是调用了属性对应的getXxx方法,而且属性不存在也不会报错、EL中调用的是getXxx方法去掉get后再将Xxx首字母大写

5、EL中的11个隐含对象

pageContext

类型:PageConext
作用:它既是JSP中的隐含对象之一,也是EL中的隐含对象之一。通过它可以获取JSP中的其他8个隐含对象。

一般在EL中获取的是:
⑴ 获取request对象
${pageContext.request}

⑵ 获取虚拟路径【/项目名】
${pageContext.request.contextPath}

pageScope

类型:Map<String, Object>
用来获取page域中的属性值

requestScope

类型:Map<String, Object>
用来获取request域中的属性值

sessionScope

类型:Map<String, Object>
用来获取session域中的属性值

applicationScope

类型:Map<String, Object>
用来获取application域中的属性值

param

类型:Map<String, String>
用来获取request中的请求参数。单个value的情况

例如:获取文本框的内容

 <input type="text" name="username" value="tomcat" />
 ${param.username}

paramValues

类型:Map<String, String[]>
用来获取request中的请求参数。同一个name,多个value的情况

例如:获取多选框的值

 <input type="checkbox" name="language" value="Java" />Java
 <input type="checkbox" name="language" value="cs" />C#
 ${paramValues.language}

类型:Map<String, String>
获取请求头中的指定name的value。单个value的情况

headerValues

类型:Map<String, String[]>
获取请求头中的指定name的value。同一个name,多个value的情况

类型:Map<String, Cookie>
根据指定的Cookie的名字,获取对应的Cookie对象

initParam

类型:Map<String, String>
根据指定的name,获取在web.xml中配置的context-param里的param-value

示例:根据name获取在web.xml中的对应value值

  <context-param>
    <param-name>username</param-name>
    <param-value>tomcat</param-value>
  </context-param>

${initParam.username}

使用示例

虚拟路径:<%=request.getContextPath()%><br />
虚拟路径:${pageContext.request.contextPath}<hr />

<%
    pageContext.setAttribute("key", "pageValue");
    request.setAttribute("key", "reqValue");
    session.setAttribute("key", "sessionValue");
    application.setAttribute("key", "appValue");
%>
${pageScope.key}<br />
${requestScope.key}<br />
${sessionScope.key}<br />
${applicationScope.key}<hr />

<%-- 【QueryString】 ?username=abc --%>
<%-- ${pageContext.request.queryString} --%>

<%=request.getParameter("username")%><br />
username: ${param.username}<br />
language: ${paramValues.language}<br /><hr />

UA:${header['User-Agent'] }<br />
Accpet:${headerValues.Accept}<br /><hr />

${cookie.JSESSIONID}<br />
${initParam.username}

6、EL运算符

算数运算符

在EL中可以直接进行加、减、乘、除等运算

empty

${empty 要判断的值}

经常使用empty运算符来判断一个字符串或一个集合是否为空。这里的空不仅指null,还指字符串是一个空串或集合中没有元素。该运算符的返回值为true或false

not empty或 !empty 表示非空
${not empty 要判断的值}

注意:
empty和null不同:
⑴ 当字符串是一个空串(”“)时,使用null判断,返回false;使用empty判断,返回true
⑵ 当集合中没有元素时,使用null判断,返回false;使用empty判断,返回true

empty和null的区别

 <%
    String str = "";
    pageContext.setAttribute("str", str);
 %>
 str == null ?  ${str == null}<br />
 empty str ?  ${empty str}<br /><hr />

 <%
    List list = new ArrayList();
    pageContext.setAttribute("list", list);
 %>
 list == null ?  ${list == null}<br />
 empty list ?  ${empty list}

判断非空

 <%
  pageContext.setAttribute("str", "abc");
      pageContext.setAttribute("list", new ArrayList());
 %>
not empty str ?  ${not empty str}<br />
!empty list ?  ${!empty list}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值