EL获取域中的数据

EL(Expression Language)是表达式语言,EL的使用可以减少JAVA代码的书写。

1、EL表达式中的常量:

  "#7fffd4">
  输出数字:${10}
输出字符串:${'ni hao'}

EL表达式不必写在脚本内部。 

 2、从域中获取数据:

(1)建立学生类的JavaBean:

package pers.zhb.domain;
public class Student {
    private String name;
    private int age;
    private String sex;
    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

(2)向域中添加数据:

//request域存储字符串
request.setAttribute("zhai","1997");

//session域存储对象
Student student1 =new Student();
student1.setAge(12);
student1.setName("李明");
student1.setSex("");
session.setAttribute("student",student1);

//application域存储一个集合
    ArrayList  list=new ArrayList();
    Student student2=new Student();
    student2.setName("赵云");
    student2.setAge(13);
    student2.setSex("");
    list.add(student2);

    Student student3=new Student();
    student3.setName("李艳");
    student3.setAge(14);
    student3.setSex("");
    list.add(student3);
application.setAttribute("list",list);
%>

(3)从域中取出数据:

<%--域中值的获取--%>
<%out.print("获取request域中的值:");%>
${requestScope.zhai}

<%out.print("获取session域中学生的所有属性:");%> ${sessionScope.student} <%out.print("获取学生的某一个属性:");%>
${sessionScope.student.name}
${sessionScope.student.age}


<%--获取application域中的集合元素--%> <%out.print("获取域中集合的所有元素:");%>
${applicationScope.list}
<%out.print("获取某一属性:");%>
${applicationScope.list[1].name}

EL获取域中的数据_第1张图片

 

3、el的全域查找:

在全域查找的时候,不会为el表达式指定域的范围,而是按照pageContext域,request域,session域,application域的顺序查找。

 使用全域查找后代码更为简洁:

<%--域的全域查找--%>
<%out.print("获取request域中的值:");%>
${zhai}

<%out.print("获取session域中学生的所有属性:");%> ${student} <%out.print("获取学生的某一个属性:");%>
${student.name}
${student.age}


<%--获取application域中的集合元素--%> <%out.print("获取域中集合的所有元素:");%>
${list}
<%out.print("获取某一属性:");%>
${list[1].name}

因为没有指定域的范围,如果在域中存储的时候,键的名字相同,会有什么情况呢?

<%
//request域存储字符串
request.setAttribute("zhai","1997");

//session域存储对象
Student student1 =new Student();
student1.setAge(12);
student1.setName("李明");
student1.setSex("");
session.setAttribute("list",student1);

//application域存储一个集合
    ArrayList  list=new ArrayList();
    Student student2=new Student();
    student2.setName("赵云");
    student2.setAge(13);
    student2.setSex("");
    list.add(student2);

    Student student3=new Student();
    student3.setName("李艳");
    student3.setAge(14);
    student3.setSex("");
    list.add(student3);
application.setAttribute("list",list);

%>

<%--域的全域查找--%>
<%out.print("获取request域中的值:");%>
${zhai}

<%out.print("获取session域中学生的所有属性:");%> ${list} <%out.print("获取学生的某一个属性:");%>
${list.name}
${list.age}

<%--获取application域中的集合元素--%> <%out.print("获取域中集合的所有元素:");%>
${list}
<%out.print("获取某一属性:");%>
${list[1].name}

将Session和application域中键的名字改为一样的:

EL获取域中的数据_第2张图片

 

 从执行结果来看,会按照特定的顺序执行优先级别较高的域。

4、el表达式的好处:

(1)简化代码,使代码简洁:

如:从application域中获取以为同学的名字:

不使用EL:

  ArrayList  list1= ( ArrayList )application.getAttribute("list");
    list1.get(1).getAge();

使用EL后:

${applicationScope.list[1].name}

使用全域查找后:

${list[1].name}

(2)不需要强制转换。

 

传统方式的不足:

需要强转。

代码多且过程复杂。

 

你可能感兴趣的:(EL获取域中的数据)