一:EL表達式:

1.定義:為了計算和輸出存儲在標志位置的Java對象的值,JSP2.0引入了一種簡潔的語言。

2.基本格式${表達式}

所有的EL都是以“${”開始,以“}”結尾

表達式與開始符和終結符的空格被忽略

表達式的值為null,則在頁面中顯示為一個空字符串,而不是null

3.EL表達式運算符

4.EL的作用域

使用EL的時候,默認會以一定順序搜索四個作用域,將最先找到的變量值顯示出來。

5.EL表達式的隱式對象

EL提供了四個與范圍有關的隱式對象,對應四個存取范圍

pageScope:范圍和JSPpage相同,只限于當前頁面

requestScope:范圍和JSPrequest相同,范圍限于一次請求

sessionScope:范圍和JSPsession相同,范圍為一次會話

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表達式的主要功能

1EL的功能

2)與<jsp:getProperty />類似

3)簡化<jsp:getProperty />

4)精確的訪問存儲對象

5Bean屬性的簡略記法

6)空值取代錯誤消息

二.JSTL

1.什么是JSTL

JSTLJavaServerPages Standard Tag LibraryJSP標準標簽庫

2.JSTL標準標簽庫內的標簽

3. 核心標簽庫

JSTL的核心標簽庫標簽共13個,從功能上可以分為4類:表達式控制標簽、流程控制標簽、循環標簽、URL操作標簽。使用這些標簽能夠完成JSP頁面的基本功能,減少編碼工作。

1)表達式控制標簽:out標簽、set標簽、remove標簽、catch標簽。

2)流程控制標簽:if標簽、choose標簽、when標簽、otherwise標簽。

3)循環標簽:forEach標簽、forTokens標簽。

4URL操作標簽: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:存值,把一個值放在指定(pagesession等)的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]>

【參數說明】:

1test屬性用于存放判斷的條件,一般使用EL表達式來編寫。

2var指定名稱用來存放判斷的結果類型為truefalse

3scope用來存放var屬性存放的范圍。

【使用場景】:在開發中經常會出現不同用戶的權限,首先對用戶名進行判斷(包括進行數據庫驗證,該功能可以由JavaBean實現,使用EL表達式得到一個布爾型的結果),把判斷的結果存放在不同的JSP范圍內(比如常用的session內),這樣在每個頁面都可以得到該用戶的權限信息,根據不同權限的用戶顯示不同的結果。

2).<c:choose>、<c:when>和<c:otherwise>標簽

3個標簽通常情況下是一起使用的,<c:choose>標簽作為<c:when><c:otherwise>標簽的父標簽來使用。

【語法1】:

<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)語法13個標簽的嵌套使用方式,<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>

【參數解析】:

1var設定變量名用于存儲從集合中取出元素。

2items指定要遍歷的集合。

3varStatus設定變量名,該變量用于存放集合中元素的信息。    

4beginend用于指定遍歷的起始位置和終止位置(可選)。

5step指定循環的步長。

其中varStatus4個狀態屬性(見表9-2)。

9-2 varStatus4個狀態

屬性名

類型

說明

index

int

當前循環的索引值

count

int

循環的次數

frist

boolean

是否為第一個位置

last

boolean

是否為第二個位置

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方式建立數據庫連接。

<sql:setDataSource driver=”driverClass” url=”jdbcURL”                                          user=”username”                                         password=”pwd”                                                       
[var=”name”]       
[scope=”page|request|session|application”]/>


9-15 <sql:DataSource>特殊標簽屬性說明

參數名

說明

EL

類型

必須

默認值

dataSource

數據源

String

Javax.sql.DataSource

var

指定存儲數據源的變量名

String

提示:是否必須是相對的,比如說如果使用數據源則,driverurl等就不再被使用。如果使用JDBC則要用到driverurluserpassword屬性。

提示:可以把數據連接的配置存入session中,如果再用到數據庫連接只須配置使用DataSource屬性。

2 )SQL操作標簽

JSTL提供了<sql:query><sql:update><sql:param><sql:dateParam><sql:transaction>5個標簽,通過使用SQL語言操作數據庫,實現增加、刪除、修改等操作。下面將介紹這5個標簽的功能和使用方式。

1<sql:query>標簽用來查詢數據。

【語法】:

<sql:query sql=”sqlQuery” var=”name” [scope=”page|request|session|application”]

                   [dataSource=”dateSource”]

                   [maxRow=”maxRow”]

                   [startRow=”starRow”]/>


 

【屬性說明】:見表9-16

9-16 <sql:query>標簽屬性說明

參數名

說明

EL

類型

必須

默認值

sql

查詢數據的SQL語句

String

dataSource

數據源對象

String

Javax.sql.DataSoutce

maxRow

設定最多可以暫存數據的行數

String

startRow

設定從那一行數據開始

String

var

指定存儲查詢結果的變量名

String

scope

指定結果的作用域

String

page

使用<sql:query>必須指定數據源,dataSource是可選的,如果未給定該屬性標簽會在page范圍內查找是否設置過數據源,如果沒有找到將拋出異常。

一般情況下使用<sql:setDateSource>標簽設置一個數據源存儲在session范圍中,當需要數據庫連接時使用dataSource屬性并實現數據庫的操作。

<sql:query>var屬性是必須的用來存放結果集,如果沒有指定scope范圍則默認為page,即在當前頁面我們可以隨時輸出查詢結果。結果集有一系列的屬性如表9-17所示。

maxRowsstartRow屬性用來操作結果集,使用SQL語句首先吧數據放入內存中,檢查是否設置了startRow屬性,如果設置了就從starRow指定的那一行開始取maxRows個值,如果沒有設定則從第一行開始取。

9-17 結果集參數說明

屬性名

類型

說明

rowCount

int

結果集中的記錄總數

Rows

Java.util.Map

以字段為索引查詢的結果

rowsByIndex

Object[]

以數字為作索引的查詢結果

columnNames

String[]

字段名稱數組

limitedByMaxRows

boolean

是否設置了maxRows屬性來限制查詢記錄的數量

提示: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>用來實現操作數據庫如:使用createupdatedeleteinsertSQL語句,并返回影響記錄的條數。

【語法】:SQL語句放在標簽屬性中。

<sql:update sql=SQL語句” [var=name] [scope=page|request|session|application]                                               [dateSource=dateSource]/>

提示:<sql:update>標簽的屬性同<sql:query>標簽的屬性相比只減少了maxRowsstartRow2個屬性。其他參數用法一樣。

使用<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>標簽體中的所有操作,恢復原來的狀態,重新對數據庫進行操作。

【語法】:

<sql:transaction [dataSource=”dataSource”]

[isolation=”read_committed|read_uncommitted|repeatable|serializable”]

> 

<sql:query>

<sql:uptade>

</sql:transation>


作者:csh624366188 發表于2012-4-2 16:56:27 原文鏈接
閱讀:416 評論:4 查看評論