1. 程式人生 > >5分鐘學會EL表示式和JSTL表示式

5分鐘學會EL表示式和JSTL表示式

                                                 EL表示式和JSTL表示式

 

一、EL表示式

        一、概念

            EL表示式是Expression Language(表示式語言),

            它可以替代JSP頁面中資料訪問時的複雜編碼可以自動轉換型別,並且使JSP的開發變得更加簡單。 

 

         二、語法 :${變數名}

            ----------a、EL的本質----------

            jsp指令碼:<%=request.getAttribute(name)%>

            EL表示式替代上面的指令碼:${requestScope.name}

            ----------b、取值和存值----------

            // 在Servlet或JSP中儲存資料

            request.setAttribute("username", "猿醫生");

            request.setAttribute("user",new User("猿醫生"));

            // 在JSP中訪問資料

            姓名: ${username}

            點操作符———> ${user.name}

            [ ]操作符———>${user["name"]}

             ----------c、EL最主要的作用是獲得四大域中的資料----------

             pageContext域:${pageScope.key}

             request域:${requestScope.key}

             session域:${sessionScope.key}

             application域:${applicationScope.key}

             EL從四個域中獲得某個值${key}; (重點)

            按照page → request → session → application的作用域順序依次查詢,找到即返回,最終找不到返回null。

 

         三、隱式物件

            EL表示式語言中定義了11個隱含物件,使用這些隱含物件可以很方便地獲取web開發中的一些常見物件,

            並讀取這些物件的資料。

       語法:${隱式物件名稱}獲得物件的引用    

序號 隱含物件名稱 描       述
1 pageContext 對應於JSP頁面中的pageContext物件(注意:取的是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物件,注意:如果頭裡面有“-” ,例Accept-Encoding,則要header[“Accept-Encoding”]
9 headerValues 表示一個儲存了所有http請求頭欄位的Map物件,它對於某個請求引數,返回的是一個string[]陣列。注意:如果頭裡面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
10 cookie 表示一個儲存了所有cookie的Map物件
11 initParam

表示一個儲存了所有web應用初始化引數的map物件

  

       ------  eg:

---------------1、pageContext物件:獲取JSP頁面中的pageContext物件------------------------

	     ${pageContext} 

 

---------------2、pageScope物件:從page域(pageScope)中查詢資料---------------------------
             <% pageContext.setAttribute("name","猿醫生");  %>

             ${pageScope.name}

 

---------------3、requestScope物件:從request域(requestScope)中獲取資料------------------
             <% request.setAttribute("name","猿醫生");  %>

             ${requestScope.name}

 

---------------4、sessionScope物件:從session域(sessionScope)中獲取資料------------------

             <% session.setAttribute("name","猿醫生");  %>

             ${sessionScope.name}
---------------5、applicationScope物件:從application域(applicationScope)中獲取資料------

             <% application.setAttribute("name","猿醫生");  %>
      
             ${applicationScope.name} 
---------------6、param物件:獲得用於儲存請求引數map,並從map中獲取資料--------------------

             <!-- http://localhost:8080/yuan/index.jsp?name=猿醫生 -->

             ${param.name}
---------------7、paramValues物件:paramValues獲得請求引數-------------------------------

             <!-- http://localhost:8080/yuan/index.jsp?like=aaa&like=bbb -->

             ${paramValues.like[0]}

             ${paramValues.like[0]}
---------------8、header物件:header獲得請求頭-------------------------------------------

	     ${header.Accept}

             測試header時,如果頭裡面有“-” ,例Accept-Encoding時:${header["Accept-Encoding"]} 
---------------9、headerValues物件:headerValues獲得請求頭的值----------------------------

	     ${headerValues.Accept[0]}

 	     測試headerValues時,如果頭裡面有“-” ,例Accept-Encoding:headerValues["Accept-Encoding"] 
---------------10、cookie物件:cookie物件獲取客戶機提交的----------------------------------

 	      cookie${cookie.JSESSIONID.value}

 	      測試cookie時,例${cookie.key}取的是cookie物件,
	      如訪問cookie的名稱和值,須${cookie.key.name}或${cookie.key.value}
---------------11、initParam物件:initParam物件獲取在web.xml檔案中配置的初始化引數-----------
	      
	      <%-- 
	    	  <!-- web.xml檔案中配置初始化引數 --> 
 
	    	  <context-param>  
	    		<param-name>yuan</param-name>  
	    		<param-value>yisheng</param-value>  
	    	  </context-param>  
	    	  <context-param>  
	    		<param-name>xxx</param-name>  
	    		<param-value>/yuan</param-value>  
	    	  </context-param>  
	      --%>  

	      <%--獲取servletContext中用於儲存初始化引數的map --%>  

	          ${initParam.yuan}  
	          ${initParam.xxx} 

        四、Empty操作符

             Empty操作符是一個字首操作符,用於檢測一個變數值是否為null或者為empty

             eg:變數name不存在,則${empty name}返回的結果為true,${not empty name}返回的結果是false.

 

        五、注意事項

            1.EL表示式是JSP2.0規範中的一門技術。因此,若想正確解析EL表示式,需使用支援Servlet2.4/JSP2.0

             技術的WEB伺服器;

             2.有些Tomcat伺服器如不能使用EL表示式:

                (1).升級tomcat版本,升級成tomcat6及以上

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

            2.要在javascript中使用El表示式,只需在在el表示式兩端加上單引號或者雙引號即可。

 

 

二、JSTL表示式

        一、概念

            JSTL是JSP標準標籤庫(JSP Standard Tag Library),提供一組標準標籤,可用於編寫各種動態功能。

            JSTL通常會與EL表示式合作實現JSP頁面的編碼。

 

        二、使用前提

            除了JSP動作標籤外,使用其他第三方的標籤庫都需要:

                a.導包;

                   官方下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

                   <1>下載jakarta-taglibs-standard-1.1.2.zip解壓,standard.jar和jstl.jar檔案拷貝到/WEB-INF/lib/下。

                   <2>在 web.xml 檔案中新增配置

                b.在使用標籤的JSP頁面中使用taglib指令匯入標籤庫;

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

     prefix="c":指定標籤庫的字首,這個字首可以隨便給值,但大家都會在使用core標籤庫時指定字首為c;

uri="http://java.sun.com/jstl/core":指定標籤庫的uri,它不一定是真實存在的網址,但它可以讓JSP找到標籤庫的描述檔案;

 

        三、常用標籤

            **核心標籤**

            表示式控制標籤:out標籤、set標籤、remove標籤、catch標籤。

            流程控制標籤:if標籤、choose標籤、when標籤、otherwise標籤。

            迴圈標籤:forEach標籤、forTokens標籤。

            URL操作標籤:import標籤、url標籤、redirect標籤。

標籤 描述
<c:out> 用於在JSP中顯示資料,就像<%= ... >
<c:set> 用於儲存資料
<c:remove> 用於刪除資料
<c:catch> 用來處理產生錯誤的異常狀況,並且將錯誤資訊儲存起來
<c:if> 與我們在一般程式中用的if一樣
<c:choose> 本身只當做<c:when>和<c:otherwise>的父標籤
<c:when> <c:choose>的子標籤,用來判斷條件是否成立
<c:otherwise> <c:choose>的子標籤,接在<c:when>標籤後,當<c:when>標籤判斷為false時被執行
<c:import> 檢索一個絕對或相對 URL,然後將其內容暴露給頁面
<c:forEach> 基礎迭代標籤,接受多種集合型別
<c:forTokens> 根據指定的分隔符來分隔內容並迭代輸出
<c:param> 用來給包含或重定向的頁面傳遞引數
<c:redirect> 重定向至一個新的URL.
<c:url> 使用可選的查詢引數來創造一個URL

 

        四、語法

 

        五、格式化標籤

JSTL格式化標籤用來格式化並輸出文字、日期、時間、數字。引用格式化標籤庫的語法如下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
標籤 描述
<fmt:formatNumber> 使用指定的格式或精度格式化數字
<fmt:parseNumber> 解析一個代表著數字,貨幣或百分比的字串
<fmt:formatDate> 使用指定的風格或模式格式化日期和時間
<fmt:parseDate> 解析一個代表著日期或時間的字串
<fmt:bundle> 繫結資源
<fmt:setLocale> 指定地區
<fmt:setBundle> 繫結資源
<fmt:timeZone> 指定時區
<fmt:setTimeZone> 指定時區
<fmt:message> 顯示資源配置檔案資訊
<fmt:requestEncoding> 設定request的字元編碼

 

        六、SQL標籤

JSTL SQL標籤庫提供了與關係型資料庫(Oracle,MySQL,SQL Server等等)進行互動的標籤。
引用SQL標籤庫的語法如下:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
標籤 描述
<sql:setDataSource> 指定資料來源
<sql:query> 執行SQL查詢語句
<sql:update> 執行SQL更新語句
<sql:param> 將SQL語句中的引數設為指定值
<sql:dateParam> 將SQL語句中的日期引數設為指定的java.util.Date 物件值
<sql:transaction> 在共享資料庫連線中提供巢狀的資料庫行為元素,將所有語句以一個事務的形式來執行

 

        七、XML 標籤

JSTL XML標籤庫提供了建立和操作XML文件的標籤。引用XML標籤庫的語法如下:

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

               在使用xml標籤前,你必須將XML 和 XPath 的相關包拷貝至你的<Tomcat 安裝目錄>\lib下:

               <1>XercesImpl.jar

                  下載地址: http://www.apache.org/dist/xerces/j/

               <2>xalan.jar

                  下載地址: http://xml.apache.org/xalan-j/index.html

標籤 描述
<x:out> 與<%= ... >,類似,不過只用於XPath表示式
<x:parse> 解析 XML 資料
<x:set> 設定XPath表示式
<x:if> 判斷XPath表示式,若為真,則執行本體中的內容,否則跳過本體
<x:forEach> 迭代XML文件中的節點
<x:choose> <x:when>和<x:otherwise>的父標籤
<x:when> <x:choose>的子標籤,用來進行條件判斷
<x:otherwise> <x:choose>的子標籤,當<x:when>判斷為false時被執行
<x:transform> 將XSL轉換應用在XML文件中
<x:param> 與<x:transform>共同使用,用於設定XSL樣式表

       

        八、JSTL函式

JSTL包含一系列標準函式,大部分是通用的字串處理函式。引用JSTL函式庫的語法如下:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函式 描述
fn:contains() 測試輸入的字串是否包含指定的子串
fn:containsIgnoreCase() 測試輸入的字串是否包含指定的子串,大小寫不敏感
fn:endsWith() 測試輸入的字串是否以指定的字尾結尾
fn:escapeXml() 跳過可以作為XML標記的字元
fn:indexOf() 返回指定字串在輸入字串中出現的位置
fn:join() 將陣列中的元素合成一個字串然後輸出
fn:length() 返回字串長度
fn:replace() 將輸入字串中指定的位置替換為指定的字串然後返回
fn:split() 將字串用指定的分隔符分隔然後組成一個子字串陣列並返回
fn:startsWith() 測試輸入字串是否以指定的字首開始
fn:substring() 返回字串的子集
fn:substringAfter() 返回字串在指定子串之後的子集
fn:substringBefore() 返回字串在指定子串之前的子集
fn:toLowerCase() 將字串中的字元轉為小寫
fn:toUpperCase() 將字串中的字元轉為大寫
fn:trim() 移除首位的空白符

 

 

                       Now ~ ~ ~寫到這裡,就寫完了,如果有幸幫助到你,請記得關注我,共同一起見證我們的成長

 

小結

謝謝觀賞,我叫猿醫生。

猿友推薦:正在奔跑的程式猿