天天看點

JavaWeb之(五)EL表達式

五、EL表達式

5.1 什麼是EL表達式

  • EL表達式:是指(Expression Language)表達式語言,是一種在JSP頁面擷取資料的簡單方式(隻能擷取資料,不能設定資料),在JSP2.0開始引入。
  • EL表達式的寫法(用美元符号“$”定界,内容包括在花括号“{}”中):
    //JSP寫法:
    <%=session.getAttribute("name") %>
    //EL表達式寫法:
    ${sessionScope.name}
               
    注意:
    1. EL表達式的代碼隻能寫在JSP的HTML代碼中,不能寫到<%與%>之間;
    2. EL表達式提供了擷取對象以及屬性的簡單方法,某些情況下EL表達式完全可以替代JSP腳本或者JSP的行為。
    JavaWeb之(五)EL表達式
  • EL表達式的相容性設定(有三種方法)

    在預設情況下,Sevlet2.3/JSP1.2是不支援EL表達式的,而Servlet2.4/JSP2.0支援。

  1. 修改web.xml檔案
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
               
  2. 設定某個JSP頁面使用EL表達式:需要在JSP頁面加上:
  3. web.xml檔案中加上下列代碼,每個JSP頁面都可以使用:
    <jsp-config>
    	<jsp-property-group>
    		<url-pattern>*.jsp</url-pattern>
    		<el-ignored>false</el-ignored>
    	</jsp-property-group>
    </jsp-config>
               

5.2 EL表達式的基本文法

EL提供“.”和“[]”兩種運算符來通路存取資料,主要使用EL擷取對象的屬性,包括JavaBean的屬性值、擷取數組中的元素以及擷取集合對象中的元素。

對于null值直接以空字元串顯示,而不是null,在運算時也不會發生錯誤或空指針異常,是以在使用EL通路對象的屬性時不需要判斷對象是否為null對象,這樣就為編寫程式提供了友善。

  • 擷取JavaBean的屬性值
    //在JSP中
    <%=user.getAge()%>
    //使用EL表達式(通常情況下這兩種寫法是通用的)
    ${use.age}
    ${user["age"]}
               
    其中,點運算符前面為 JavaBean 的對象 user,後面為該對象的屬性 age,表示利用 user 對象的 getAge 方法取值并顯示在網頁上。
  • 擷取數組的元素
    //在servlet中存儲這樣一個數組
    String dogs[] = {"lili","huahua","guoguo"};
    request.setAtribute("array",dogs);
    //在對應視圖JSP中取出數組中的元素
    ${array[0]}
    ${array[1]}
    ${array[2]}
               
  • 擷取集合對象中的元素
    //在servlet中定義一個數組對象
    User user1 = new User("01","zhangsan",23,"男");
    User user2 = new User("02","小李",18,"女");
    ArrayList<User> user = new ArrayList<>();
    user.add(user1);
    user.add(user2);
    request.setAttribute("array",user);
    //在JPS頁面中取出集合中User對象的屬性
    ${array[0].id} ${array[0].name} ${array[0].age} 
    ${array[1].id} ${array[1].name} ${array[1].age} 
               

    注意:

    以下兩種情況必須使用“[]”:

    1.包含特殊符号:

    ${user.first-name} 錯誤; ${user[“first-name”]} 正确

    2. 通過動态變量取值:

    ${user[param]}

5.3 EL表達式的變量

EL存取變量資料的方法很簡單,即從4個作用域對象中,從小到大的去擷取,如果需要指定作用域擷取資料,可使用以下 EL 的内置對象來指定。

JSP内置對象 EL名稱
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
<%
    // 向頁面域中添加一個字元串
   	pageContext.setAttribute("name", "頁面域");
   	// 請求域
   	request.setAttribute("name", "請求域");
   	// 會話域
   	session.setAttribute("name", "會話域");
   	// 上下文域
   	application.setAttribute("name", "上下文域");
    // 自動查找作用域擷取
    ${name}
%>
           

EL表達式的查找順序:

Page<Request<Session<Application

EL的隐式對象

JavaWeb之(五)EL表達式

5.4 EL表達式的運算符

類别 運算符
算術運算符 +、-、*、/或div、%或mod
關系運算符 ==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
邏輯運算符 &&或and、
其他運算符 Empty運算符、條件運算符、()運算符

5.5 EL表達式的自動類型轉換

要擷取文本框中的輸入,我們需要做類型轉換

//正常的java代碼
String str = request.getParameter("count");
int count = Integer.parseInt(str);
count = count + 20;
//用EL表達式時,EL表達式會進行自動類型轉換
${param.count + 20}