• 【JSP】EL表达式语言


    EL简介

    EL语言原本是JSTL1.0中的技术(所以EL和JSTL配合如此亲密和默契也就是自然的了),但是从JSP2.0开始(JSTL1.1)就分离出来纳入了JSP的标准了。因此EL不需要任何jar包,他是集成到JSP技术本身中的了。
    由于EL定位是 表达式语言,因此EL只能用于做简单的运算和取值,它是JSP无脚本化的一个利器,非常易学。
     
    EL的特点
     
    1、所有的EL表达式的格式 ${   expression   },例如取的一个对象user的age属性 ${ user.name }
     
    2、可以使用在任何自定义标签(包括JSTL , JSP Action,EL 函数)的属性上,或者作为JSP的响应文本数据。
     
    3、作为JSP的响应文本数据时,  若EL 表达式的值为null ,他将不会显示任何内容。
     

    基本类型

    由于EL是一种 表达式语言,因此你没有机会去定义变量,也就是没有诸如 int , char 之类的类型关键词。只能使用字面量或者对象属性量。
     
    bool布尔:    true    false
     
    integer类型  :   如 89 , 90 ,-1 , 0 ...
     
    浮点类型float:  如 0.12,  90.123  , -190.123,1.0E2 ...
     
    字符串类型String: 如  'hello'  ,  "hello"   ...   (可以使用单引号,或者双引号)
     
    引用类型 :    null 和 非null(主要是JavaBean对象,java.util.Map  , java.util.List , Java数字,Java字符串 和 EL隐式对象)
     

    保留字

    and      or       not
    div       mod
    if          empty
    ge        ne      eq     gt     lt  
    true      false
    null       instanceof
     
     

    运算符

    EL内置的运算符如果也不能满足你的需求,你还可以使用JSTL,JSTL也不能满足你,那你还可以使用自定义标签和自定义EL函数。
     
    类型 运算符 备注
    算术运算 +      -      *        /      % 注意除法是浮点数除法,7/5=1.2
    逻辑运算 &&     ||      !  
    关系运算 >     >=      <      <=     ==      != 可以对字符串使用,按照字典顺序排列比较
    三元运算  ${ condition ? expA : expB } 例如  ${sessionScope.user==null? "你没有登录" : "你已经登录"}
    空判断 empty object
    如果object是null,则直接返回true。
    否则接着判断对象是Map , List, 数租 ,String如果是空的(size=0),则返回true。
    他是一个前缀运算符。
    分界符 ( ) 控制运算符优先级
    属性获取运算符 [ ] 或者 . 

    用于获取对象的属性。 obj.pro 等价于 obj["pro"]。如果obj和pro之一为null,则返回null。

    后者点运算符使用的更加普遍,但是如果属性pro不是合法的Java标识符,则必须使用[ ]来取属性。

     
     

    EL中的对象和他们的属性

    在LE中有2个运算符用来取对象属性: [ ] 和 .

    一般情况下,后者使用的较多。但是如果属性包含非Java标志符,如 “-” ,则必须使用 [ ] 来取属性。
    EL的对象主要是: JavaBean对象,java.util.Map , java.util.List , Java数字,Java字符串 和 EL隐式对象。属性运算符用来取他们的属性。

    属性运算符可以连用: 如user.address.postCode      、   pageContext.request["method"]

    JavaBean

    要用EL取的JavaBean的属性,首先这个属性必须满足JavaBean的规范。我们可以将一个JavaBean对象存放在pageScope,requestScope,sessionScope或者applicationScope中,在用EL取JavaBean对象的属性时,不必指明JavaBean存储在什么Scope中,他会自动依次从 pageScope,requestScope,sessionScope, applicationScope中找,返回第一次找的值(因为内部使用的是PageContext对象的findAttribute方法)。但是为了让代码更加清晰,显式指定Scope也未尝不可。

     
    package model;
    
    public class User
    {
          private String name;
          private int age;
          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 ;
          }
    }
    <%@ page contentType= "text/html; charset=UTF-8"   pageEncoding ="UTF-8" trimDirectiveWhitespaces= "true"
             session ="true" %>
    
    <%@ page import= "model.*" %>
    
    <%-- 将对一个user存放到pageScope中,并初始化age属性为21 --%>
    
    < jsp:useBean id ="user" class= "model.User" scope = "page">
          < jsp:setProperty name ="user" property= "age" value = "${param.age} " />
    </ jsp:useBean>
    
    user的age属性值:${user.age} <br />
    user的age属性值:${pageScope.user.age} <br />
    java.util.Map
     
    mapObj [key]
    如果map或者key之一为null,就会返回null
    如果map中不包含key这个键,则返回null
    否则返回map中键对应的值
     
     
    java.util.List  和 Java数组
     
    arrObj[index]
    如果 arrObj 和 index 之一为null,则返回null
    如果index不能转换为int,则抛出异常。
    index越界会返回null
    否则返回列表或者数组对应索引处的元素值
     

    EL中的隐式对象

     
     
    pageScope page范围,是一个存储k-v属性的一个Map容器。
    requestScope request范围,是一个存储k-v属性 的一个Map容器
    sessionScope session范围,是一个存储k-v属性 的一个Map容器
    applicationScope application 范围,是一个存储k-v属性 的一个Map容器
    param

    存储求参数Paramter的Map容器。等价于request.getParameter()。

    用于取单值请求参数。如果用来获取多值参数,如checkbox 的值,则只返回第一个值。

    paramValues
    用于获取多值请求参数。返回所有值的String数组(例如checkbox的)。如果这个参数只有一个值,则返回一个只有1个元素的数组。
    等价于request,.getParameterValues()
    pageContext
    也就是JSP中的隐式对象pageContext。pageContext  JSP页面的上下文对象。可以获取其他8大对象。
     
    ${pageContext.request.method}    获取当前请求方法。
     
    ${pageContext.session.id} 等价于 session.getId()
    ${pageContext.request.queryString} 取得请求的查询字符串
    ${pageContext.request.requestURL} 取得请求的URL 
    ${pageContext.request.contextPath} 服务的web application 的名称
    ${pageContext.request.method} 取得HTTP 的方法(GET、POST)
    ${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
    ${pageContext.request.remoteUser} 取得用户名称
    ${pageContext.request.remoteAddr } 取得用户的IP 地址
    ${pageContext.session.new} 判断session 是否为新的
    ${pageContext.session.id} 取得session 的ID
    ${pageContext.servletContext.serverInfo} 取得主机端的服务信息
     
    initParam ServletContext对象的getInitParameter。在web.xml中配置的全局初始参数的一个Map容器
    cookie 代表容纳当前请求的所有cookie对象的中的一个Map,每一个cookie 的名称name就是key.
    header
    包含所有请求头的一个Map。用于访问单值请求头。如果用来访问多值请求头,则值返回第一个值。
    ${header["accept-language"]}
    ${header.connection}
    headerValues
    用于获取多值请求头。返回多值标头的值的String数组。
    如果这个头域只有一个值,则返回一个只有1个元素的数组。
     
     
     

    EL函数和自定义EL函数

     
     
     
  • 相关阅读:
    L2-004. 这是二叉搜索树吗?
    CF934A A Compatible Pair
    CF937B Vile Grasshoppers
    CF940B Our Tanya is Crying Out Loud
    ZOJ 3182 Nine Interlinks
    ZOJ 3175 Number of Containers
    Codeforces Round #193 (Div. 2) B
    CodeForces 149D Coloring Brackets
    POJ 2653 Pick-up sticks(计算几何)
    UVA 12506 Shortest Names
  • 原文地址:https://www.cnblogs.com/lulipro/p/7487566.html
Copyright © 2020-2023  润新知