1 JSTL
JSTL(JSP Standard Tag Library ,JSP標準標籤庫)是一個不斷完善的開放原始碼的JSP標籤庫,是由apache的jakarta小組來維護的。
1.1 JSTL的作用
JSTL 有助於加速開發週期,極大地簡化了 JSP 應用程式的開發和維護。
1.2 JSTL的使用
將jstl.jar和 standard.jar檔案放到classpath中,如果你還需要使用XML processing及Database access (SQL)標籤,還要將相關JAR檔案放到classpath中,在JSP頁面頭部加入<%@ taglib prefix="..." uri="..." %>,然後在這個JSP頁面中就可以使用這個引入的標籤了。
1.3 JSTL中常用標籤
核心標籤庫、國際化標籤(I18N)
1.3.1 核心標籤庫
Core 標籤庫主要包括了一般用途的標籤、條件標籤、迭代標籤和 URL 相關的標籤。在 JSP 頁面使用 Core 標籤,要使用 taglig 指令,指定引用的標籤庫,如下:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<c:out>的功能與JSP中的<%= 運算式%>類似,用於向頁面輸出,其文法格式分為如下五種:
- 通過在<c:out>中的value屬性指定需要顯示的值。<c:out value="value"/>
- 通過escapeXml屬性設定是否將value中的內容按照原樣輸出。因為<c:out>預設會將<、>、’、”、&轉換成<、>、'、"和&。如果不想轉換,只需要設定escapeXml屬性為“false”。<c:out value="value" escapeXml="true | false"/>
- 通過default屬性來指定預設值。如果value的值為null時,則顯示default的值。<c:out value="value" default="No data"/>
- 通過本體內容來指定預設值。如果value的值為null時,則顯示default的值。<c:out value="value" escapeXml="true | false"/>本體內容</c:out>
.<c:set>用於設定範圍變數的值或者 javabean 對象的屬性,其文法格式分為如下五種:
- 指定變數名以及變數值,不指定scope(範圍)。<c:set var="username" value="value"></c:set>
- 將value的值儲存到範圍為scope的變數中。<c:set var="username" value="value" scope=”page | request | session | application”></c:set>
- 將本體內容的資料儲存至範圍為scope的變數中。<c:set var="varname" scope=”page | request | session | application”>本體內容</c:set>
- 將value值儲存到targer對象的屬性中。<c:set value=”value” target=”target” property=”propertyName”></c:set>
- 將本體內容的資料儲存到targer對象的屬性中。<c:set target=”target” property=”propertyName”>本體內容</c:set
<c:remove>用來移除指定範圍的變數。其文法格式如下:
<c:remove var=”number” scope=”session”>,var屬性指定待刪除變數的名稱,scope屬性是可選的,用來指定刪除變數的範圍,預設為page。
<c:if>標籤用來執行流程式控制制,其功能和Java語言中的if完全相同。<c:if>標籤有兩種文法格式:一種沒有本體內容,一種有本體內容。
- 沒有本體內容的<c:if>標籤格式如下。<c:if test = ”testCondition” var=”varName” [scope=”{page | request | session | application}]” />其中test屬性是必須填寫的,表示進行判斷的運算式。屬性var定義變數,該變數存放判斷後的結果。scope表示var定義變數儲存的範圍。
- 有本體內容的<c:if>標籤格式如下。<c:if test = ”testCondition” var=”varName” [scope=”{page | request | session | application}]” >本體內容</if>其中test屬性是必須填寫的,當test中運算式的結果為true時,則會執行本體內容;如果為false則不會執行。
<c:if>標籤只能判斷一個運算式,而且無法指定如果運算式不成立執行語句。JSTL同樣提供了類似於if....else....的語句<c:choose>標籤。<c:choose>中可以有一個或多個<c:when>標籤,有零個或多個<c:otherwise>標籤。其文法格式如下:
<c:choose>
<c:when test = ”testCondition”>
</c:when>
...
<c:oherwise>
</c:oherwise>
</c:choose>
<c:forEach>標籤兩種文法格式。一種用來遍曆集合對象的成員,一種用來使語句迴圈執行指定次數。
- <c:forEach>遍曆集合對象的成員,文法格式如下:<c:forEach [var=”varname”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地內容</forEach>,其中“var”用來存放現在指到的成員;“items”指被迭代的集合對象;“varStatus”用來存放現在指到的相關成員的資訊;“begin”表示開始位置(預設為0);“end”表示結束位置。“step”表示步長(預設為1)。
- <c:forEach>指定語句執行次數,其文法格式如下:<c:forEach [var=”varname”] [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地內容</forEach>
<c:forTokens>用來根據指定分隔字元分割字串。其文法格式如下:
<c:forTokens [var=”varname”] items=”stringOfTokens” delims=”delimiters” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地內容</c:forTokens>
其中“var”、“varStatus”、“begin”、“end”、“step”屬性和<c:forEach>標籤中用法一樣。“items”屬性工作表示被分割的字串,“delims”屬性指定分隔字元。<c:forTokens>不僅可以分割僅有一個分隔字元的字串,也可以通過設定多個分割符來分割有多個分隔字元的字串,只需要設定多個分隔字元就可以了。
<c:import>可以把其他靜態或動態檔案包含到本身的JSP網頁中。它和JSP動作指令的<jsp:include>最大的差別在於:<jsp:include>只能包含和自己在同一Web application下的檔案;而<c:import>除了能夠包含和自己的同一Web application的檔案外,也可以包含不同Web application或者其他網站的檔案。<c:import>的文法格式如下:
<c:import url=”url” [context=”context”] [var=”varName”] [scope=”{page | request | session | application}”] [charEncoding=”charEncoding”]>本體內容</c:import>或
<c:import url=”url” [context=”context”] varReader=”varReaderName” [charEncoding=”charEncoding”]>本體內容</c:import>
<c:param>標籤用來傳遞參數,其包含兩個參數name和value。< c:param>的文法格式如下:
<c:param name=“參數名” value=“參數值”>
1.3.2 國際化標籤(I18N)
在JSP頁面中要使用到格式化標籤,必須使用<%@taglib%>指令,指定格式化標籤。代碼如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt: formatNumber>會根據地區或是定製的方式將數字格式化成數字、貨幣或百分比。文法分為兩種,一種是沒有本體內容,使用value屬性來指定要格式化的數字;一種有本體內容,使用本體內容來指定要格式化的數字。格式如下:
<fmt:formatNumber value=”number” [type={number | currency | percent}]
[pattern=”pattern”]
[currencyCode=” currencyCode”]
[currencySymbol=” currencySymbol”]
[groupingUsed=”{true | false}”]
[maxIntegerDigits=” maxIntegerDigits”]
[minIntegerDigits=” minIntegerDigits”]
[maxFractionDigits=” maxFractionDigits”]
[minFractionDigits=” minFractionDigits”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>
<fmt: parseNumber>用來將字串類型的數字、貨幣或百分比轉換成數字類型。和<fmt: formatNumber>標籤的作用正好相反。文法同樣分為兩種,一種是沒有本體內容,使用value屬性來指定要轉換成數位字串;一種有本體內容,使用本體內容來指定轉換成數位字串。格式如下:
<fmt: parseNumber value=”numberString” [type={number | currency | percent}]
[pattern=”pattern”]
[parseLocale=” parseLocale”]
[integerOnly=”{false | true}”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>
<fmt: formatDate>會根據地區或是定製的方式將日期或時間格式化,用來將日期類型轉化成字串類型日期。其文法格式如下:
<fmt: formatDate value=”number” [type={time | date | both}]
[pattern=”pattern”]
[dateStyle=”{default | short | medium | long | full}”]
[timeStyle=”{default | short | medium | long | full}”]
[timeZone=” timeZone”]
[var=”varName”]
[scope=”{page | request | session | application}”
]/>
<fmt: parseDate>用來將字串類型的時間或日期轉換成日期時間類型。和<fmt: formatDate>標籤的作用正好相反。文法同樣分為兩種,一種是沒有本體內容,使用value屬性來指定要轉換成日期時間的字串;一種有本體內容,使用本體內容來指定轉換成日期時間的字串。格式如下:
<fmt: parseDate value=”date” [type={time | date | both}]
[pattern=”pattern”]
[dateStyle=”{default | short | medium | long | full}”]
[timeStyle=”{default | short | medium | long | full}”]
[timeZone=” timeZone”][var=”varName”]
[scope=”{page | request | session | application}”]
/>
<fmt: setTimeZone>用來設定預設時區或者是將時區儲存到屬性範圍中。其文法格式如下:
<fmt:setTimeZone value=”timeZone” [var=”varName”][scope=”{page | request | session | application}”]/>
<fmt: timeZone>用來暫時的設定時區。其文法格式如下:
<fmt:timeZone value=”timeZone”>本體內容</fmt:setTimeZones>
<fmt: setLocale>標籤用來設定使用者的地區語言。這裡所指的地區語言是指使用者所在地區使用的語言種類以及國家和地區的綜合。比如中國內地所使用的語言為中文,語言代碼為“zh”,而地區代碼為“cn”,所以中國內地的語言地區為“zh_cn”。<fmt:setLocale>的文法格式如下:
<fmt:setLocale value=”locale” [variant=”variant”][scope=”{page | request | session | application}”]/>
<fmt: requestEncoding>用來設定接受的字串的編碼格式,與request.setCharacterEncoding()功能一樣。<fmt: requestEncoding >的文法格式如下:
<fmt: requestEncoding value=”charseName”/>
<fmt: setBundle>用來設定預設的資料來源,也可以將儲存到一定範圍中,供需要時使用。<fmt: setBundle>的文法格式如下:
<fmt: setBundle basename=” basename” [var=”varName”][scope=”{page | request | session | application}”]/>
<fmt: message>用來從指定的資源檔中通過索引(key)取得值(value)。其文法分為兩種,一種是沒有本體內容,使用key屬性來指定要索引;一種有本體內容,使用本體內容來指定索引。文法格式如下:
<fmt: message key=”messageKey” [bundle=”resourceBundle”][var=”varName”][scope=”{page | request | session | application}”]/>
當從資源檔中取得資訊時,可能需要動態設定參數,例如使用者名稱等。這是就需要通過<fmt:param>來傳遞參數。其文法分為兩種,一種是沒有本體內容,使用value屬性來指定要參數值;一種有本體內容,使用本體內容來指定參數值。文法格式如下:
沒有本體內容,<fmt:param value=”messageParameter”/>
有本體內容,<fmt:param value=”messageParameter”>參數值</fmt:param>
<fmt: bundle>同樣用來設定資料來源,但是與<fmt: setBundle>不同的是,<fmt: bundle>設定資料來源只對本體內容中的標籤有效。其文法格式如下:<fmt:bundle basename=”basename” [prefix=”prefix”]>本體內容{<fmt:message>}</fmt:bundle>
message<fmt: setLocale>標籤用來設定使用者的地區語言。這裡所指的地區語言是指使用者所在地區使用的語言種類以及國家和地區的綜合。比如中國內地所使用的語言為中文,語言代碼為“zh”,而地區代碼為“cn”,所以中國內地的語言地區為“zh_cn”。<fmt:setLocale>的文法格式如下。<fmt:setLocale value=”locale” [variant=”variant”][scope=”{page | request | session | application}”]/>timeZoneformatDateparseNumberformatNumber
2 POJO
POJO:POJO(Plain Old Java Objects)簡單的Java對象,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。
使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接. 其中有一些屬性及其getter setter方法的類,沒有商務邏輯,有時可以作為VO(value -object)或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業務方法,也不能攜帶有connection之類的方法。 POJO實質上可以理解為簡單的實體類,顧名思義POJO類的作用是方便程式員使用資料庫中的資料表,對於廣大的程式員,可以很方便的將POJO類當做對象來進行使用,當然也是可以方便的調用其get,set方法。
3 MVC3.1 什麼是MVC
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用於組織代碼用一種商務邏輯和資料顯示分離的方法。
3.2 MVC的作用
MVC是一個架構模式,它強制性的使應用的輸入、處理和輸出分開,便於開發和維護。
交流探討到我的新浪微博:http://weibo.com/tianrui1990