2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

JAVA培訓之EL表達式

更新時間:2017-04-16 來源:黑馬程序員Java培訓學院 瀏覽量:


1.什么是EL表達式

EL是Expression Language的縮寫,它是jsp內置的表達式語言,從jsp2.0開始,就不讓再使用java腳本,而是使用el表達式或動態標簽來代替java腳本。EL表達式的格式如下:
${表達式}
EL表達式代替的是java腳本中的<%= …%>,也就是說EL表達式也是向瀏覽器端輸出數據。例如${1+2}會向瀏覽器端輸出3。

2.EL表達式的使用

    2.1EL表達式之全域查找
通過對EL表達式的初步了解,下面我們通過練習來掌握EL表達式的使用,點擊此處 1494485866319_001.jpg下載案例源代碼,如下所示:
(1)創建一個web應用,Example6,對該應用的index.jsp頁面進行編輯,如例1-1所示:

例1-1 index.jsp

<body>
    This is my JSP page. <br>
    <%
     request.setAttribute("request_attribute", "request_haha");
     %>
     ${request_attribute }
</body>
例1-1中,首先向request域中存放名字為“request_attribute“的域屬性,值為”request_haha“,然后使用EL表達式將request_attribute從request域中取出,輸出在瀏覽器端。
(2)將Example6發布到服務器端,然后啟動服務器,在瀏覽器端訪問index.jsp頁面,瀏覽器顯示結果如圖1-1所示:

1494486771877_002.jpg

圖1-1 瀏覽器顯示結果
由圖1-1可知,使用EL表達式成功的從request域中取出了數據。
(3)再次修改index.jsp頁面,如例1-2所示:
例1-2 index.jsp
<body>
    This is my JSP page. <br>
    <%
        pageContext.setAttribute("attribute", "pageContext_haha");
        session.setAttribute("attribute", "session_haha");
        application.setAttribute("attribute", "application_haha");
        request.setAttribute("attribute", "request_haha");
     %>
     ${attribute }
</body>
例1-2中,在jsp的四大域中都存放了名字為“attribute“的與屬性,但值各不相同。現在使用EL表達式向瀏覽器端輸出attribute的值,那么瀏覽器端會輸出哪個域的屬性值?
(4)再次在瀏覽器端訪問index.jsp頁面,瀏覽器顯示結果如圖1-2所示:

1494485992914_003.jpg

圖1-2 瀏覽器顯示結果
由圖1-2可知,${attribute}表達式是從pageContext域中取數據。
(5)將index.jsp頁面中的向pageContext域中存放數據的代碼注釋掉,然后再在瀏覽器端訪問index.jsp,瀏覽器顯示結果如圖1-3所示:

1494486021321_004.png

圖1-3 瀏覽器顯示結果
由圖1-3可知,el表達式是從request域中取出的數據。現在再將向request域中存放數據的代碼注釋掉,再次在瀏覽器端訪問index.jsp頁面,瀏覽器顯示結果如圖1-4所示:

1494486278543_005.jpg

圖1-4 瀏覽器顯示結果
圖1-4中,el表達式取出的是session域中的屬性值,如果再將向session域存放數據的代碼注釋掉,再次訪問index.jsp頁面,瀏覽器端輸出的仍然是“session_haha“,這是因為session對象還存在,那么它當中的域屬性自然也就存在,將瀏覽器關閉,再打開然后再訪問index.jsp,瀏覽器端的輸出結果如圖1-5所示:

1494486306606_005.jpg

圖1-5 瀏覽器顯示結果
通過以上對jsp四大域的操作,可以發現使用EL表達式獲取數據是依次從jsp的四大域中獲取,即全域查找,次序是page域,request域,session域最后是application域,如果page域中存在,就返回并結束查找,如果沒有,就去request域中查找,找到就返回并結束查找,如果request域中也沒有,那么就繼續去session域中查找,以此類推,最后查找到application域。如果這四個域中都沒有,那么EL表達式就返回一個空字符串,即在頁面上什么也不顯示,如圖1-6所示:

1494486330528_006.jpg

圖1-6 瀏覽器顯示結果
    2.2EL表達式之獲取指定域中的數據
在2.1小節中,我們學習了使用EL表達式進行全域查找,但是進行全域查找必然會影響效率,因此現在我們來學習使用EL表達式從指定域中獲取數據,具體如下:
(1)再次對index.jsp頁面進行修改,如例1-3所示:
<body>
    This is my JSP page. <br>
    <%
        request.setAttribute("attribute", "request_haha");
        pageContext.setAttribute("attribute", "pageContext_haha");
        session.setAttribute("attribute", "session_haha");
        application.setAttribute("attribute", "application_haha");
     %>
   <p>全域查找:${attribute }</p> 
   <p>從page域中查找:${pageScope.attribute }</p> 
   <p>從request域中查找:${requestScope.attribute }</p> 
   <p>從session域中查找: ${sessionScope.attribute }</p>
   <p>從application域中查找:${applicationScope.attribute }</p> 
</body>
例1-3中,如果要指定從哪個域中獲取數據,一定要在指定的域名稱后面加上“Scope“,否則不能從指定的域中獲取數據。
(2)在瀏覽器端訪問index.jsp,瀏覽器顯示結果如圖1-7所示:

1494486358872_007.jpg

圖1-7 瀏覽器顯示結果
其實,使用EL表達式獲取jsp四個域中的數據:
  • pageScope:${pageScope.name}等同與pageContext.getAttribute(“name”);
  • requestScope:${requestScope.name}等同與request.getAttribute(“name”);
  • sessionScoep: ${sessionScope.name}等同與session.getAttribute(“name”);
  • applicationScope:${applicationScope.name}等同與application.getAttribute(“name”);
    2.3EL表達式之javaBean導航
如果在域中保存的是javaBean對象,那么也可以使用EL表達式來訪問javaBean的屬性,因為EL表達式只做讀操作,所以javaBean一定要為屬性提供get方法,而對set方法沒有要求。使用EL表達式獲取javaBean屬性就是javaBean導航。
下面通過一個案例來了解EL表達式是如何進行JavaBean導航的,如下所示:
(1)在Example6應用中,新建一個javaBean類,Address,主要代碼如例1-4所示:
例1-4 Address.java
public class Address {
    private String city;
    private String street;
    此處省略Address類的成員變量的get/set方法
    @Override
    public String toString() {
       return "Address [city=" + city + ", street=" + street + "]";
    }  
}
(2)在Example6應用中,再次新建一個javaBean類,Employee,主要代碼如例1-5所示:
例1-5 Employee.java
public class Employee {
    private String name;
    private double salary;
    private Address address;
此處省略Employee類的成員變量的get/set方法
@Override
    public String toString() {
       return "Employee [name=" + name + ", salary=" + salary + ", address="
               + address + "]";
    }
}
(3)在Example6下的WebRoot目錄下新建一個目錄el,然后在該目錄下新建一個el.jsp文件,主要代碼如例1-6所示:
例1-6 el.jsp
<%@ page import="cn.itcast.domain.*" %><!—由于在跟頁面中需要使用Address,Employee類,所以這里需要將它們導入-->
  <body>
<%
    Address address = new Address();
    address.setCity("北京");
    address.setStreet("西三旗");
   
    Employee emp = new Employee();
    emp.setName("李小四");
    emp.setSalary(123456);
    emp.setAddress(address);
   
    request.setAttribute("emp", emp);
%>
<h3>使用el獲取request域的emp</h3>
${requestScope.emp }<br/>
  </body>
例1-6中,創建了Address和Employee的對象,并將屬性賦值,其中address對象是emp對象的一個屬性,然后將emp對象保存在request域中,再使用el表達式獲取emp對象。
(4)重新啟動服務器,在瀏覽器端訪問el.jsp頁面,瀏覽器顯示結果如圖1-8所示:

1494486394247_008.jpg

圖1-8 瀏覽器顯示結果
現在想獲取該emp對象的address屬性的street屬性,el表達式該如何寫?
(5)對el.jsp頁面稍作修改,如例1-7所示:
... ...
<h3>使用el獲取request域的emp對象的address屬性的street屬性</h3>
${requestScope.emp.address.street}
   ... ...
(6)再次訪問el.jsp頁面,瀏覽器顯示結果如圖1-9所示:

1494486420529_009.jpg

圖1-9 瀏覽器顯示結果
由圖1-9可知,使用例1-7所示的el表達式成功的獲取到street屬性的值,例1-7中的el表達式就是javaBean導航,其底層代碼如下:
Employee _emp=(Employee)request.getAttribute("emp");
String street=_emp.getAddress().getStreet();
因此我們在前面特意強調,如果域中存放的是javaBean對象,javaBean一定要為每個屬性提供get方法,因為在使用el表達式獲取javaBen屬性時,底層就是調用屬性的get方法。
(7)在Employee類中添加一個get方法,如例1-8所示:
例1-8 getHehe()方法
此處省略例1-5中的代碼
public String getHehe() {
       return "我去...";
    }
(8)在el.jsp頁面中使用el表達式輸出該方法的返回值,如例1-9所示:
此處省略例1-6中的代碼
${emp.hehe }

(9)重新啟動服務器,訪問index.jsp頁面,瀏覽器顯示結果如圖1-10所示:

1494486447732_010.jpg


圖1-10 瀏覽器顯示結果
由圖1-10可知,Employee類中雖然沒有名稱為”hehe”的成員變量,但是提供了get方法,因此hehe就是Employee的屬性,那么在jsp頁面中就能通過el表達式${emp.hehe}輸出該方法的返回值,進一步說明該el表達式底層就是調用javaBean的get方法。

3.EL表達式運算符

EL是表達式語言,它可以進行一些運算,可使用的運算符如表1-1所示:
表1-1 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
 

本文版權歸黑馬程序員Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!

作者:黑馬程序員Java培訓學院

首發:http://www.itheima.com/special/hmjavaeezly/


分享到:
在線咨詢 我要報名
和我們在線交談!