zoukankan      html  css  js  c++  java
  • ④品茶看<Servlet&JSP>-EL表达式

    前言

      今早,概率课偷了下小懒写的:

                    

      泡一杯红茶,ACM集训前,写篇博客记录记录EL表达式。

            #EL介绍

            ①EL 语法

            ②访问JavaBean等

            ③EL隐式对象

            ④EL运算符

    EL介绍

      EL 全名为Expression Language。受ECMAScript 和XPath 表达式的语言启发。EL 的语法比传统JSP Scriptlet 更为方便、简洁。

    EL 语法

      ①基本知识

        ${为起始、以}为结尾的,构造:${expression}。接下来比较下:   

        JSP Scriptlet获取:

    User user = (User)session.getAttribute("user");
    
    String sex = user.getName( );

        EL 获取:

    ${sessionScope.user.sex}
    

      

      ② [] 和 . 运算符

        EL表达式中,对象有属性。就可以利用  [] 和 . 运算符  来访问该属性,两者功能相似。

        例如:下面都是一样的。

    ${sessionScope.user.name}
    

            或者

    ${sessionScope.user["name"]}
    

      

       两者功能差异

       # 当要存取的属性名称中包含一些特殊字符,如或 – 等并非字母或数字的符号,就一定要使用 [ ]。

        例如:

    ${sessionScope.user["My-Name"] }      ${header["accept-language"] }

       #我们来考虑下列情况:

        selection是一个变量,可以代表user各个属性。

          ${sessionScope.user[selection]}

        如果selection为"name",就相当于${sessionScope.user.name}或者${sessionScope.user["name"]}

        因此,如果要动态取值时,. (点)运算符无法做到动态取值, []  运算符 可以做到。

    访问JavaBean

    类型
    实例
    方法
    JavaBeans
    ${user.username}
    ${user["username"]}
    ${user['username']}
    user.getUsername()
    数组
    ${sport[1]}
    ${sport["1"]}
    ${sport['1']}
    sport[1]
    List
    ${phone[2]}
    ${phone["2"]}
    ${phone['2']}
    phone.get(2)
    Map
    ${phone.home}
    ${phone["home"]}
    ${phone['home']}
    phone.get("home")

    EL隐式对象

    隐含对象

    类型

    说明

    PageContext

    javax.servlet.jspPageContext

    表示当前JSPjavax.servlet.jsp.PageContext

    PageScope

    java.util.Map

    取得Page范围的属性名称所对应的值

    RequestScope

    java.util.Map

    取得Request范围的属性名称所对应的值

    sessionScope

    java.util.Map

    取得Session范围的属性名称所对应的值

    applicationScope

    java.util.Map

    取得Application范围的属性名称所对应的值

    param

    java.util.Map

    如同ServletRequest.getParameter(String name)。回传String类型的值

    paramValues

    java.util.Map

    如同ServletRequest.getParameterValues(String name)。回传String[]类型的值

    header

    java.util.Map

    如同ServletRequest.getHeader(String name)。回传String类型的值

    headerValues

    java.util.Map

    如同ServletRequest.getHeaders(String name)。回传String[]类型的值

    cookie

    java.util.Map

    如同HttpServletRequest.getCookies()

    initParam

    java.util.Map

    如同ServletContext.getInitParameter(String name)。回传String类型的值

    cookie

      隐式对象cookie包含了当前HttpServletRequest的所有cookie 的Map。

      例如

        获取一个名为jsessionid的cookie值:    

    ${cookie.jsessionid.value}
    

      

    header 和headerValues

    header 储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。

      例如

        获取accept-language语言

    ${header["accept-language"]}。
    

      注意:当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ]。

     

    initParam

     

      就想我们在web-xml 配置 初始化值得时候,我们用initParam隐式对象可以获取。

     

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    
    version="2.4">:
    
    <context-param>
    
    <param-name>username</param-name>
    
    <param-value>jeffli</param-value>
    
    </context-param>:
    
    </web-app>

      

      用EL表达式获取:

     ${initParam.username}
    

          等价于       

    String userid = (String)application.getInitParameter("username");
    

      

    param和paramValues

     


      同上面的理

    ${param.name}
    ${paramValues.name}

      等价于

    request.getParameter(String name)
    request.getParameterValues(String name)

     

    EL运算符

    逻辑运算符

    实例

    结果

    &&and

    交集${A && B}${A and B}

    true/false

    ||or

    并集${A || B}${A or B}

    true/false

    !not

    ${! A }${not A}

    true/false

     

    总结

      EL学习,这次比较全。以前用着就去看,索性写篇博客记录下。

              

                    学这个,好比ABC... 慢慢来,多写多用就会了。

  • 相关阅读:
    【经典数据结构】B树与B+树
    【经典算法】线性时间排序
    【经典算法】归并排序
    【经典算法】快速排序
    python模块之shelve
    python模块之pickle
    python模块之json
    python之序列化
    python模块之shutil和zipfile
    python模块之sys
  • 原文地址:https://www.cnblogs.com/Alandre/p/3597380.html
Copyright © 2011-2022 走看看