JavaWeb 07 EL

来源:互联网 发布:京东人工智能 编辑:程序博客网 时间:2024/06/09 15:42

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