zoukankan      html  css  js  c++  java
  • Javaweb之EL表达式

    1.EL表达式简介

    EL全名为Expression Language。EL的主要作用为:

    • 获取数据:EL表达式主要用于替换jsp页面中的脚本表达式,以从各种类型的web域中检索java对象,获取数据。(某个web域中的对象,访问JavaBean的属性,访问list集合,访问map集合,访问数组)
    • 执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
    • 获取web开发常用对象:EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
    • 调用java方法:EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

    1.1 获取数据

    使用EL表达式获取数据的语法:"${标识符}"

    EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回""(空字符串)。若没有指定哪个属性范围,它的默认值会从page范围找,假如找不到,再依序到request,session,application范围找。假如全部的范围都找不到时,就返回null值了。如下:${ }中没有sessionScope属性范围,依旧可以读到存储的数据。

    <body>
      <%
      Customer customer=new Customer();
      customer.setName("koala");
      customer.setAge(12);
      session.setAttribute("customer",customer);
       %>
       <br>
       name: ${customer.name}
       <br>
       age: ${customer.age}
    </body>
    

    EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据。

    获取request域中的对象:

    <body>
        <% request.setAttribute("name", "koala"); %>
        name: ${name}
    </body>

     

    获取JavaBean的属性:

    <body>
    <%
      Customer customer=new Customer();
      customer.setAge(21);
      request.setAttribute("customer",customer);
     %>
     customer's age: ${customer.age}
    </body>
    

    获取list集合中指定位置的元素:

    <body>
      <%
        Customer customer1=new Customer();
        customer1.setAge(21);
        Customer customer2=new Customer();
        customer2.setAge(23);
        List<Customer> list=new ArrayList<Customer>();
        list.add(customer1);
        list.add(customer2);
        request.setAttribute("list", list);
       %>
       customer2's age:${list[1].age}
     </body>
    

    1.2 执行运算

    语法:${运算表达式},EL表达式支持如下运算符:

    1.2.1 关系运算符

    1.2.2 逻辑运算符

    1.2.3 empty运算符

    检查对象是否为null(空)

    1.2.4 二元表达式

    ${username==null?"":user.name}

    1.2.5 []和.号运算符

    EL提供.和[]两种运算符来存取数据,两者所代表的意思是一样的。

    如下,当域对象的属性名中有特殊字符“.”时使用[]会很方便:

    <body>
      <%
      Customer customer=new Customer();
      customer.setName("koala");
      session.setAttribute("com.d.dsa",customer);
       %>
       <br>
       name: ${sessionScope["com.d.dsa"].name}
    </body>
    

    2.EL的隐含对象

    EL中一共有11个隐含对象,可以将它分成三类:

    • 与范围有关的隐含对象:pageScope, requestScope, sessionScope, applicationScope
    • 与输入有关的隐含对象,获取请求参数的:param(一个), paramValues(一组)
    • 其它请求对象:cookie, header, headerValues, initParam, pageContext

    2.1 与范围有关的隐含对象

    <body>
      time:${applicationScope.time}
      <!-- 相当于
      <%=application.getAttribute("time") %>
      -->
      <%
      application.setAttribute("time",new Date());
       %>
    </body>
    

    2.2 与输入有关的隐含对象

    el.jsp中:

     <body>
      <a href="http://localhost:8080/MyWebProject/jspTest/el2.jsp?score=98&name=A&name=B">To EL2 page</a>
     </body>

     el2.jsp中:

    <body>
        score:${param.score}
    <!--相当于:
        <%= request.getAttribute("score")%>
          -->
        <br>
        names:${paramValues.name[0]} and ${paramValues.name[1]}
    </body>

    运行el.jsp:

    点击超链接:

    注:

    names:${paramValues.name[0].class.name} 
    

    相当于

    <%= request.getParameterValues("name")[0].getClass().getName()%>
    

    也就是只要返回值有get...方法,就可以使用EL方法调用。

    2.3 其它请求对象

    • cookie:假如我们在cookie中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。
    • header和headerValues:header存储用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如,用户浏览器的版本,用户计算机所设定的区域等其他相关数据。若同一标头名称拥有不同的值,改用headerValues。
    • initParam:获得当前web应用的初始化参数:在web.xml中进行配置,
    <context-param>
        <param-name>initName</param-name>
        <param-value>koala</param-value>
    </context-param>
    

    在jsp文件中使用initParam:${initParam.initName}即可获得当前web应用的初始化参数koala。

    • pageContext:pageContext即为PageContext类型,但只能读取属性。

    contextPath:${pageContext.request.contextPath}

    sessionId:${pageContext.session.id}

    sessionAttributeNames:${pageContext.session.attributeNames}

    3.EL的关系运算符

    比较重要的是三目运算符:${param.score > 60 ? "及格" : "不及格"}

    4.empty运算符

    empty可以作用于一个集合,若集合不存在或集合中没有元素,其结果都为true。

    <body>
      <% 
      List<String> names=new ArrayList<String>();
      names.add("abc");
      request.setAttribute("names",names);
      %>
      names is empty:${empty requestScope.names}
    </body>
    

    运行jsp文件,

    搜索微信公众号“程序员考拉”欢迎关注!

  • 相关阅读:
    POJ 1741
    POJ 3107
    权限管理
    用户和组
    软件包管理简介
    制作网线
    认识vim编辑器
    linux 进阶命令
    linux 目录&基础命令
    在raw_input()中使用中文提示,在CMD下中文乱码问题解决。。。
  • 原文地址:https://www.cnblogs.com/naihuangbao/p/9839393.html
Copyright © 2011-2022 走看看