Zi 字媒體
2017-07-25T20:27:27+00:00
一:EL表達式:1.定義:為了計算和輸出存儲在標誌位置的Java對象的值,JSP2.0引入了一種簡潔的語言。2.基本格式:${表達式}所有的EL都是以「${」開始,以「}」結尾表達式與開始符和終結符的空格被忽略表達式的值為null,則在頁面中顯示為一個空字元串,而不是null3.EL表達式運算符4.EL的作用域使用EL的時候,默認會以一定順序搜索四個作用域,將最先找到的變數值顯示出來。5.EL表達式的隱式對象EL提供了四個與範圍有關的隱式對象,對應四個存取範圍pageScope:範圍和JSP的page相同,只限於當前頁面requestScope:範圍和JSP的request相同,範圍限於一次請求sessionScope:範圍和JSP的session相同,範圍為一次會話applicationScope:從伺服器一開始執行服務,到伺服器關 閉為止在EL中,四個隱含對象只能單純用來取得對應範圍內的屬性值6.使用EL表達式的好處1)代替複雜代碼,省去條件判斷2)簡單訪問Bean的屬性:${user.name}3)使用EL表達式可以輸出MVC中的內容,代碼簡單例如:Servlet的 doPost或doGet方法中,保存在作用域範圍內數據,可以在其它的JSP頁面獲取。如Servlet中有如下代碼:request.getSession.setAttribute(「loginedUser」,user);在JSP頁面中可以這樣獲取:${loginedUser.name}7.EL顯示Form表單請求參數信息EL提供了兩個與輸入有關的隱含對象:param 和paramValues用於獲取<form></form>表單提交的信息,用來解析request中的參數格式:${param.參數名}或${paramValues.參數名}等同於Java中的request.getParameter(「參數名」)或request.getParameterValues(「參數名」)8.總結EL表達式的主要功能1)EL的功能2)與<jsp:getProperty />類似3)簡化<jsp:getProperty />4)精確的訪問存儲對象5)Bean屬性的簡略記法6)空值取代錯誤消息二.JSTL1.什麼是JSTLJSTL(JavaServerPages Standard Tag Library)JSP標準標籤庫2.JSTL標準標籤庫內的標籤3. 核心標籤庫JSTL的核心標籤庫標籤共13個,從功能上可以分為4類:表達式控制標籤、流程式控制制標籤、循環標籤、URL操作標籤。使用這些標籤能夠完成JSP頁面的基本功能,減少編碼工作。(1)表達式控制標籤:out標籤、set標籤、remove標籤、catch標籤。(2)流程式控制制標籤:if標籤、choose標籤、when標籤、otherwise標籤。(3)循環標籤:forEach標籤、forTokens標籤。(4)URL操作標籤:import標籤、url標籤、redirect標籤。在JSP頁面引入核心標籤庫的代碼為:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>下面將按照功能分類,分別講解每個標籤的功能和使用方式。1) 表達式控制標籤表達式控制分類中包括<c:out>、<c:set>、<c:remove>、<c:catch>4個標籤,現在分別介紹它們的功能和語法。1.<c:out>標籤【功能】:用來顯示數據對象(字元串、表達式)的內容或結果。在使用Java腳本輸出時常使用的方式為:<% out.println(「字元串」)%><%=表達式%>使用<c:out>標籤就可以實現以上功能。<c:out value=」字元串」<c:out value=」EL表達式」提示:JSTL的使用是和EL表達式分不開的,EL表達式雖然可以直接將結果返回給頁面,但有時得到的結果為空,<c:out>有特定的結果處理功能,EL的單獨使用會降低程序的易讀性,建議把EL的結果輸入放入<c:out>標籤中。<c:out>標籤的使用有兩種語法格式。【語法1】:<c:out value=」要顯示的數據對象」 [escapeXml=」true|false」] [default=」默認值」]>【語法2】:<c:out value=」要顯示的數據對象」 [escapeXml=」true|false」]>默認值2.<c:set>標籤功能:主要用於將變數存取於JSP範圍中或JavaBean屬性中。<c:set>標籤的編寫共有4種語法格式。語法1:存值,把一個值放在指定(page、session等)的map中。<c:set value=」值1」 var=」name1」 [scope=」page|request|session|application」]>含義:把一個變數名為name1值為「值1」的變數存儲在指定的scope範圍內。含義:把一個變數名為name2,值為值2的變數存儲在指定的scope範圍內。語法3:<c:set value=」值3」 target=」JavaBean對象」 property=」屬性名」/>含義:把一個值為「值3」賦值給指定的JavaBean的屬性名。相當與setter方法。提示:從共能上分語法1和語法2(未寫)、語法3和語法4(未寫)的效果是一樣的只是把value值放置的位置不同至於使用那個根據個人的喜愛,語法1和語法2是向scope範圍內存儲一個值,語法3和語法4是給指定的JavaBean賦值。3.<c:remove>標籤<c:remove>標籤主要用來從指定的JSP範圍內移除指定的變數。【語法】:<c:remove var=」變數名」 [scope=」page|request|session|application」]/>其中var屬性是必須的,scope可以以省略。4.<c:catch>標籤:用來處理JSP頁面中產生的異常,並將異常信息存儲。【語法】:<c:catch var=」name1」容易產生異常的代碼</c:catch>【參數說明】:var表示由用戶定義存取異常信息的變數的名稱。省略后也可以實現異常的捕獲,當就不能顯示的輸出異常信息。4.流程式控制制標籤流程式控制制標籤主要用於對頁面簡單業務邏輯進行控制。流程式控制制標籤包含有4個:<c:if>標籤、<c:choose>標籤、<c:when>標籤和<c:otherwise>標籤。下面將介紹這些標籤的功能和使用方式。1).<c:if>標籤<c:if>同程序中的if作用相同,用來實現條件控制。【語法1】:<c:if test=」條件1」 var=」name」 [scope=」page|request|session|application」]>【語法2】:<c:if test=」條件2」 var=」name」[scope=」page|request|session|application」]>【參數說明】:(1)test屬性用於存放判斷的條件,一般使用EL表達式來編寫。(2)var指定名稱用來存放判斷的結果類型為true或false。(3)scope用來存放var屬性存放的範圍。【使用場景】:在開發中經常會出現不同用戶的許可權,首先對用戶名進行判斷(包括進行資料庫驗證,該功能可以由JavaBean實現,使用EL表達式得到一個布爾型的結果),把判斷的結果存放在不同的JSP範圍內(比如常用的session內),這樣在每個頁面都可以得到該用戶的許可權信息,根據不同許可權的用戶顯示不同的結果。2).<c:choose>、<c:when>和<c:otherwise>標籤這3個標籤通常情況下是一起使用的,<c:choose>標籤作為<c:when>和<c:otherwise>標籤的父標籤來使用。【語法1】:[html] view plain copy print?<c:choose <c:when …..//業務邏輯1 </c:when <c:otherwise …..//業務邏輯2 </c:otherwise ….//業務邏輯3 </c:choose 【語法2】: <c:when text=」條件」 表達式 </c:when 【語法3】: <c:otherwise 表達式 </c:otherwise 【參數說明】:(1)語法1為3個標籤的嵌套使用方式,<c:choose>標籤只能和<c:when>標籤共同使用。(2)語法2為<c:when>標籤的使用方式,該標籤都條件進行判斷,一般情況下和<c:choose>共同使用。(3)<c:otherwise>不含有參數,只能跟<c:when>共同使用,並且在嵌套中只允許出現一次。 5.循環標籤循環標籤主要實現迭代操作。主要包含兩個標籤:<c:forEach>和<c:forTokens>標籤,我們主要是看<c:forEach>標籤該標籤根據循環條件遍歷集合(Collection)中的元素。【語法】:<c:forEach var=」name」 items=」Collection」 varStatus=」StatusName」 begin=」begin」 end=」end」 step=」step」本體內容</c:forEach>【參數解析】:(1)var設定變數名用於存儲從集合中取出元素。(2)items指定要遍歷的集合。(3)varStatus設定變數名,該變數用於存放集合中元素的信息。 (4)begin、end用於指定遍歷的起始位置和終止位置(可選)。(5)step指定循環的步長。其中varStatus有4個狀態屬性(見表9-2)。表9-2 varStatus的4個狀態6.SQL標籤庫JSTL提供了與資料庫相關操作的標籤,可以直接從頁面上實現資料庫操作的功能,在開發小型網站是可以很方便的實現數據的讀取和操作。SQL標籤庫從功能上可以劃分為兩類:設置數據源標籤、SQL指令標籤。引入SQL標籤庫的指令代碼為:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>1) 設置數據源使用<sql:setDataSource>標籤可以實現對數據源的配置。【語法1】:直接使用已經存在的數據源。<sql:setDataSource dataSource=」dataSource」[var=」name」] [scope=」page|request|session|application」]/>【語法2】:使用JDBC方式建立資料庫連接。[html] view plain copy print?<sql:setDataSource driver=」driverClass」 url=」jdbcURL」 user=」username」 password=」pwd」[html] view plain copy print?[var=」name」] [html] view plain copy print?[scope=」page|request|session|application」]/> 表9-15 <sql:DataSource>特殊標籤屬性說明提示:是否必須是相對的,比如說如果使用數據源則,driver、url等就不再被使用。如果使用JDBC則要用到driver、url、user、password屬性。提示:可以把數據連接的配置存入session中,如果再用到資料庫連接只須配置使用DataSource屬性。2 )SQL操作標籤JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam>和<sql:transaction>這5個標籤,通過使用SQL語言操作資料庫,實現增加、刪除、修改等操作。下面將介紹這5個標籤的功能和使用方式。1.<sql:query>標籤用來查詢數據。【語法】:[html] view plain copy print?<sql:query sql=」sqlQuery」 var=」name」 [scope=」page|request|session|application」] [dataSource=」dateSource」] [maxRow=」maxRow」] [startRow=」starRow」]/> 【屬性說明】:見表9-16。表9-16 <sql:query>標籤屬性說明使用<sql:query>必須指定數據源,dataSource是可選的,如果未給定該屬性標籤會在page範圍內查找是否設置過數據源,如果沒有找到將拋出異常。一般情況下使用<sql:setDateSource>標籤設置一個數據源存儲在session範圍中,當需要資料庫連接時使用dataSource屬性並實現資料庫的操作。<sql:query>的var屬性是必須的用來存放結果集,如果沒有指定scope範圍則默認為page,即在當前頁面我們可以隨時輸出查詢結果。結果集有一系列的屬性如表9-17所示。maxRows和startRow屬性用來操作結果集,使用SQL語句首先吧數據放入內存中,檢查是否設置了startRow屬性,如果設置了就從starRow指定的那一行開始取maxRows個值,如果沒有設定則從第一行開始取。表9-17 結果集參數說明提示:limitedByMaxRows用來判斷程序是否收到maxRows屬性的限制。並不是說設定了maxRows屬性,得到結果集的limitedByMaxRows的屬性都為true,當取出的結果集小於maxRows時,則maxRows沒有對結果集起到作用此時也為false。例如可以使用startRow屬性限制結果集的數據量。結果集的作用就是定義了數據在頁面中的顯示方式。下面給出了結果集每個屬性的作用。q rowCount屬性。該屬性統計結果集中有效記錄的量,可以使用於大批量數據分頁顯示。q Rows屬性。等到每個欄位對應的值。返回的結果為:欄位名={欄位值···}q rowsByIndex屬性。常用得到資料庫中數據的方式,從有效行的第一個元素開始遍歷,到最後一個有效行的最後一個元素。q columnNames屬性。用於得到資料庫中的欄位名。q limitedByMaxRows屬性。用於判斷是否受到了maxRows的限制。2).<sql:update>標籤<sql:update>用來實現操作資料庫如:使用create、update、delete和insert等SQL語句,並返回影響記錄的條數。【語法】:SQL語句放在標籤屬性中。<sql:update sql=」SQL語句」 [var=」name」] [scope=」page|request|session|application」] [dateSource=」dateSource」]/>提示:<sql:update>標籤的屬性同<sql:query>標籤的屬性相比只減少了maxRows和startRow2個屬性。其他參數用法一樣。使用<sql:update>可以實現數據表的創建、插入數據、更行數據、刪除數據。使用時只須在標籤中放入正確的SQL語句即可,同時要捕獲可能產生的異常。本節只對一個簡單的插入操作進行說明。3.<sql:param>標籤<sql:param>標籤用於動態的為SQL語句設定參數,同<sql:query>標籤共同使用。可以防止SQL注入作用類似於java.sql.PreparedStatement。【語法】:<sql:param value=」value」/>【參數說明】:value的作用為SQL中的參數賦值。4.<sql:dataParam>標籤主要用於為SQL標籤填充日期類型的參數值。【語法】:<sql:dateParam value=」date」[type=」timestamp|time|date」]/>【參數說明】:q value屬性:java.util.Date類型的參數。q type屬性:指定填充日期的類型timestamp(全部日期和時間)、time(填充的參數為時間)、date(填充的參數為日期)。5.<sql:transaction>標籤<sql:transaction>標籤提供了數據操作的一種安全機制(即事務回滾),當操作資料庫的某條SQL語句發生異常時,取消<sql:transaction>標籤體中的所有操作,恢復原來的狀態,重新對資料庫進行操作。【語法】:[html] view plain copy print?<sql:transaction [dataSource=」dataSource」] [isolation=」read_committed|read_uncommitted|repeatable|serializable」] <sql:query <sql:uptade </sql:transation
寫了
5860316篇文章,獲得
23313次喜歡