zoukankan      html  css  js  c++  java
  • 【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函数

     
     
     
  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/lulipro/p/7487566.html
Copyright © 2011-2022 走看看