EL表達式和EL函數庫

1、EL表達式簡介

  EL 全名爲Expression Language。EL主要做用: java

一、獲取數據 web

    EL表達式主要用於替換JSP頁面中的腳本表達式<%= %>,以從各類類型的web域 中檢索java對象、獲取數據。(某個web域 中的對象,訪問javabean的屬性、訪問list集合、訪問map集合、訪問數組)數組

二、執行運算 tomcat

    利用EL表達式能夠在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。${user==null}服務器

三、獲取web開發經常使用對象 cookie

    EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員能夠很輕鬆得到對web經常使用對象的引用,從而得到這些對象中的數據。session

四、調用Java方法 app

    EL表達式容許用戶開發自定義EL函數,以在JSP頁面中經過EL表達式調用Java類的方法。less


1.1 EL獲取數據

    使用EL表達式獲取數據語法:「${標識符}」 jsp

    EL表達式語句在執行時,會調用pageContext.findAttribute方法,用標識符爲關鍵字,分別從page、request、session、application四個域中查找相應的對象,找到則返回相應對象,找不到則返回」」 (注意,不是null,而是空字符串)。

    EL表達式能夠很輕鬆獲取JavaBean的屬性,或獲取數組CollectionMap類型集合的數據。


1.2 EL執行表達式

(1)關係運算

這裏寫圖片描述

(2)邏輯運算

這裏寫圖片描述

(3)empty運算

    empty運算符:檢查對象是否爲null(空), 一種是null,沒有建立;二是建立了,裏面沒有東西,是空的。

    eg:    ${!empty(list)}    判斷list對象是否爲空或null

(4)二元表達式:${user!=null?user.name :」「} 


1.3 EL獲取web開發經常使用對象

    EL表達式語言中定義了11個隱含對象(包括以前的9大內置對象中的5個,另外新增了param、paramValues、header、 headerValues、cookie和web初始化參數initParam),使用這些隱含對象能夠很方便地獲取web開發中的一些常見對象,並讀取這些對象的數據。 

語法:${隱式對象名稱}    得到對象的引用

序號 name(隱含對象名稱) 描述
1 pageContext 對應於JSP頁面的pageContext對象
2 pageScope 表明page域中用於保存屬性的Map對象
3 requestScope 表明request域中用於保存屬性的Map對象
4 sessionScope 表明session域中用於保存屬性的Map對象
5 applicationScope 表明application域中用於保存屬性的Map對象
6 param 表示一個保存全部請求參數的Map對象
7 paramValues
表示一個保存全部請求參數的Map對象,對於某個請求參數,返回的是一個與之對應的String[]
8 header 表示一個保存了全部http請求頭字段的Map對象
9 headerValues 表示一個保存了全部http請求頭字段的Map對象,對於某個請求參數,返回的是一個與之對應的String[]
10 cookie 表示一個保存了全部cookie的Map對象
11 iniParam 表示了一個保存了全部web應用初始化參數的Map對象

例如:

<!-- http://localhost:8080/JavaWeb_EL_Study/ELDemo03.jsp?name=aaa  -->
<!-- 此表達式常常用在數據回顯上 -->
${param.name}

<!-- http://localhost:8080/JavaWeb_EL_Study/ELDemo03.jsp?like=aaa&like=bbb -->
${paramValues.like[0]}  
${paramValues.like[1]}

<%-- ${header.Accept-Encoding} 這樣寫會報錯,測試headerValues時,若是頭裏面有「-」 ,例Accept-Encoding,則要headerValues[「Accept-Encoding」] --%>


<!-- 從cookie隱式對象中根據名稱獲取到的是cookie對象,要想獲取值,還須要.value -->
${cookie.JSESSIONID.value}  //保存全部cookie的map

    測試cookie時,例${cookie.key}取的是cookie對象,如訪問cookie的名稱和值,須${cookie.key.name}或${cookie.key.value}。

1.3.1 數據回顯

eg:

servlet

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet {
    /* 
     * 處理用戶註冊的方法
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //一、接收參數
        String userName = request.getParameter("username");
        /**
         * 二、直接跳轉回/ELDemo03.jsp頁面,
         * 沒有使用request.setAttribute("userName", userName)將userName存儲到request對象中
         * 可是在ELDemo03.jsp頁面中可使用${param.username}獲取到request對象中的username參數的值
         */
        request.getRequestDispatcher("/ELDemo03.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

   jsp

<!-- 利用param能夠獲取回顯數據 -->
<p>${param.username}</p>

 注:直接跳轉回/ELDemo03.jsp頁面, 沒有使用request.setAttribute("userName", userName)將userName存儲到request對象中,可是在ELDemo03.jsp頁面中可使用${param.username}能夠獲取到request對象中的username參數的值


1.4 EL調用Java方法

  • EL表達式語法容許開發人員開發自定義函數,以調用Java類的方法。語法:${prefix:method(params)} 

  • 在EL表達式中調用的只能是Java類的靜態方法,這個Java類的靜態方法須要在TLD文件中描述,才能夠被EL表達式調用。 

  • EL自定義函數用於擴展EL表達式的功能,可讓EL表達式完成普通Java程序代碼所能完成的功能。


1.5 EL Function開發步驟

 通常來講, EL自定義函數開發與應用包括如下三個步驟: 

  • 編寫一個Java類的靜態方法 

  • 編寫標籤庫描述符(tld)文件,在tld文件中描述自定義函數。 

  • 在JSP頁面中導入和使用自定義函數

不作重點考慮


1.6 EL注意事項

  EL表達式是JSP 2.0規範中的一門技術 。所以,若想正確解析EL表達式,需使用支持Servlet2.4/JSP2.0技術的WEB服務器。 

注意:有些Tomcat服務器如不能使用EL表達式 

(1)升級成tomcat6 

(2)在JSP中加入<%@ page isELIgnored="false" %>


1.7 EL保留關鍵字

這裏寫圖片描述


2、EL函數庫

    因爲在JSP頁面中顯示數據時,常常須要對顯示的字符串進行處理,SUN公司針對於一些常見處理定義了一套EL函數庫供開發者使用。 

    這些EL函數在JSTL開發包中進行描述,所以在JSP頁面中使用SUN公司的EL函數庫,須要導入JSTL開發包,並在頁面中導入EL函數庫

(1)導入相關的jstl包

<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

(2)jsp頁面引用

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>


3、EL表達式不能解析

解決辦法1:

當web.xml裏是dtd時

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
 <web-app>
 </web-app>

能夠在jsp頁面中添加:

<%@ page isELIgnored="false" %>

解決辦法2:

也能夠將上述web.xml裏的dtd改成如下xsd

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         version="2.5"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>


The isELIgnored Attribute 

• Format 

– <%@ page isELIgnored="false" %> 

– <%@ page isELIgnored="true" %> 

Purpose 

– To control whether the JSP 2.0 Expression Language 

(EL) is ignored (true) or evaluated normally (false). 

• Notes 

– If your web.xml specifies servlets 2.3 (corresponding to 

JSP 1.2) or earlier, the default is true 

• But it is still legal to change the default—you are permitted 

to use this attribute in a JSP-2.0-compliant server 

regardless of the web.xml version. 

– If your web.xml specifies servlets 2.4 (corresponding to 

JSP 2.0) or earlier, the default is false

相關文章
相關標籤/搜索