天天看點

EL(表達式語言)

EL(表達式語言)

1、EL概述
    EL是JSP内置的表達式語言!
        * jsp2.0開始,不讓再使用java腳本,而是使用el表達式和動态标簽來替代java腳本!
        * EL替代的是<%= ... %>,也就是說,EL隻能做輸出!
    1.1、EL的作用
        JSP2.0要把html和css分離、要把html和javascript分離、要把Java腳本替換成标簽。标簽的好處是非Java人員都可以使用。
        JSP2.0 – 純标簽頁面,即:不包含<% … %>、<%! … %>,以及<%= … %>

    1.2、EL的格式
        格式:${…}
        例如:${1 + 2}
    1.3、關閉EL
        如果希望整個JSP忽略EL表達式,需要在page指令中指定isELIgnored=”true”。
        如果希望忽略某個EL表達式,可以在EL表達式之前添加“\”,例如:\${1 + 2}。
    1.4、EL運算符
      
運算符 說明 範例 結果
+ ${17+5} 22
- ${17-5} 12
* ${17*5} 85
/或div ${17/5}或${17 div 5} 3
%或mod 取餘 ${17%5}或${17 mod 5} 2
==或eq 等于 ${5==5}或${5 eq 5} true
!=或ne 不等于 ${5!=5}或${5 ne 5} false
<或lt 小于 ${3<5}或${3 lt 5} true
>或gt 大于 ${3>5}或${3 gt 5} false
<=或le 小于等于 ${3<=5}或${3 le 5} true
>=或ge 大于等于 ${3>=5}或${3 ge 5} false
&&或and 并且 ${true&&false}或${true and false} false
!或not ${!true}或${not true} false
||或or 或者 ${true||false}或${true or false} true
empty 是否為空 ${empty “”},可以判斷字元串、資料、集合的長度是否為0,為0傳回true。empty還可以與not或!一起使用。${not empty “”} true
1.5、EL不顯示null
        當EL表達式的值為null時,會在頁面上顯示空白,即什麼都不顯示。

2、EL表達式格式
    先來了解一下EL表達式的格式!現在還不能示範它,因為需要學習了EL11個内置對象後才友善顯示它。
        * 操作List和數組:${list[0]}、${arr[0]};
        * 操作bean的屬性:${person.name}、${person[‘name’]},對應person.getName()方法;
        * 操作Map的值:${map.key}、${map[‘key’]},對應map.get(key)。
    如果在域中儲存的是JavaBean對象,那麼可以使用EL來通路JavaBean屬性。因為EL隻做讀取操作,
    是以JavaBean一定要提供get方法,而set方法沒有要求。

3、EL内置對象
    EL一共11個内置對象,無需建立即可以使用。這11個内置對象中有10個是Map類型的,最後一個是pageContext對象。
        * pageScope
        * requestScope
        * sessionScope
        * applicationScope
        * param;
        * paramValues;
        * header;
        * headerValues;
        * initParam;
        * cookie;
        * pageContext;

    3.1、域相關内置對象(重點)
        域内置對象一共有四個:
            * pageScope:${pageScope.name} 等同于 pageContext.getAttribute("name");
            * requestScope:${requestScope.name} 等同于 request.getAttribute("name");
            * sessionScoep: ${sessionScope.name} 等同于 session.getAttribute("name");
            * applicationScope:${applicationScope.name} 等同于 application.getAttribute("name");
        EL表達式來讀取四大域
            * ${xxx},全域查找名為xxx的屬性,如果不存在,輸出空字元串,而不是null。
            * ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域擷取屬性!
        全域查找:${xxx}表示依次在pageScope、requesScopet、sessionScope、appliationScope四個域中查找名字為person的屬性。


    3.2、param 和 paramValues:請求參數相關内置對象
        * param:Map<String,String>類型,param對象可以用來擷取參數,與request.getParameter()方法相同。
                注意,在使用EL擷取參數時,如果參數不存在,傳回的是空字元串,而不是null。這一點與使用request.getParameter()方法是不同的。
            ${param.username }
        * paramValues:paramValues是Map<String, String[]>類型,當一個參數名,對應多個參數值時可以使用它。
            ${paramValues.hobby[0] }
            ${paramValues.hobby[1] }
    3.3、header 和 headerValues :請求頭相關内置對象
        * header: Map<String,String>類型,用來擷取請求頭。
            ${header['User-Agent']}
        * headerValues:headerValues是Map<String,String[]>類型。當一個請求頭名稱,對應多個值時,使用該對象,這裡就不在贅述。

    3.4、initParam:應用初始化參數相關内置對象
        * initParam:initParam是Map<String,String>類型。它對應web.xml檔案中的<context-param>參數。
            <context-param>
                <param-name>yyy</param-name>
                <param-value>YYY</param-value>
            </context-param>
            ${initParam.yyy}
    3.5、Cookie相關内置對象
        * cookie:cookie是Map<String,Cookie>類型,其中key是Cookie的名字,而值是Cookie對象本身。
            ${cookie.JSESSIONID.value }、${cookie.JSESSIONID.name }
    3.6、pageContext對象
        pageContext:pageContext是PageContext類型!可以使用pageContext對象調用getXXX()方法,
        ${pageContext.request.contextPath}常用的動态獲得項目路徑,如:/day12_1
        例如方法 pageContext.getRequest() 等同于 ${pageContext.request}。也就是讀取JavaBean屬性!!!
      
EL表達式 說明
${pageContext.request.queryString} pageContext.getRequest().getQueryString();
${pageContext.request.requestURL} pageContext.getRequest().getRequestURL();
${pageContext.request.contextPath} pageContext.getRequest().getContextPath();
${pageContext.request.method} pageContext.getRequest().getMethod();
${pageContext.request.protocol} pageContext.getRequest().getProtocol();
${pageContext.request.remoteUser} pageContext.getRequest().getRemoteUser();
${pageContext.request.remoteAddr} pageContext.getRequest().getRemoteAddr();
${pageContext.session.new} pageContext.getSession().isNew();
${pageContext.session.id} pageContext.getSession().getId();
${pageContext.servletContext.serverInfo} pageContext.getServletContext().getServerInfo();
例:
    AServlet:
        Address address = new Address();
        address.setCity("北京");
        address.setStreet("西三旗");

        Employee emp = new Employee();
        emp.setName("李小四");
        emp.setSalary(123456);
        emp.setAddress(address);

        request.setAttribute("emp", emp);
        request.getRequestDispatcher("/day12_1/a.jsp").forward(request,response);
    ------------------------------------------
    頁面擷取:
        <h3>使用el擷取request域的emp</h3>
        ${requestScope.emp.address.street }
        <!-- 等同于内置對象獲得 request.getAttribute("emp").getAddress().getStreet() --><br/>

      

繼續閱讀