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

1、EL表达式中的常量:

  <body bgcolor="#7fffd4">
  输出数字:${10}<br>
  输出字符串:${'ni hao'}<br>
  </body>

EL表达式(获取域中的数据、全域查找、好处)_el表达式

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 <Student> list=new ArrayList<Student>();
    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域中的值:");%><br>
${requestScope.zhai}<br>
<hr>

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

EL表达式(获取域中的数据、全域查找、好处)_字符串_02

 

3、el的全域查找:

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

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

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

<%out.print("获取session域中学生的所有属性:");%>
${student}
<%out.print("获取学生的某一个属性:");%><br>
${student.name}<br>
${student.age}<br>
<hr>
<%--获取application域中的集合元素--%> <%out.print("获取域中集合的所有元素:");%><br> ${list}<br> <%out.print("获取某一属性:");%><br> ${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 <Student> list=new ArrayList<Student>();
    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域中的值:");%><br>
${zhai}<br>
<hr>

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

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

EL表达式(获取域中的数据、全域查找、好处)_字符串_03

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

 

4、el表达式的好处:

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

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

不使用EL:

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

使用EL后:

${applicationScope.list[1].name}

使用全域查找后:

${list[1].name}

(2)不需要强制转换

传统方式的不足:

需要强转,代码多且过程复杂。

 

每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛