版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 由金·海伊馮,Java 技術(shù)顧問馬克·羅斯,</p><p> JavaServerPages 2.0 說明 公司領(lǐng)導(dǎo)</p><p><b> 2003年2月 </b></p><p> 作為JavaServer Pages(JSP)技術(shù)正變得被廣泛地在網(wǎng)上的應(yīng)用過程中采用, 很多JSP 程序員
2、和從事于網(wǎng)絡(luò)開發(fā)與維護(hù)這些網(wǎng)絡(luò)用途的開發(fā)者面臨著一個左右為難的窘境,這和許多JAVA程序員面臨的窘境是一樣的,就是:"我們怎樣組織JSP 代碼,使它容易讀寫并且一貫保持?"</p><p> 在這篇文章里, 我們?yōu)閷慗SP 頁(第1.1 版本和1.2)提出一套標(biāo)準(zhǔn)協(xié)定,那應(yīng)該由使用網(wǎng)組成部分的一項典型的軟件項目遵循。文章依據(jù)了一個JAVA程序語言模板的編碼協(xié)定,這種協(xié)議用作鑒定各種各樣的重要
3、的元素, 那種元素應(yīng)該被在一種編碼的協(xié)定說明(對JSP 技術(shù)相關(guān))過程中提出。 尤其, 它地址文件名字和組織,凹口,說明,指令,申明,scriptlets,表達(dá)方式,白色的空間,命名約定和編程慣例。 因為這在提出一套JSP編碼約定時是我們的第一個嘗試, 你對這些建議的任何反饋對于我們都十分感興趣。 請把全部反饋送到j(luò)sp-codeconv-comments@sun.com。</p><p> JavaServe
4、r第2.0 頁說明, 當(dāng)有第1.2 版本完全向后相容時, 考慮到一種無書寫的編程風(fēng)格(如果沒有申明,scriptlets和表達(dá)方式)和有許多新特征預(yù)計逐步形成這些約定。 可能的話,這篇文章選擇將調(diào)控新JSP的約定為2.0個技術(shù)特征。 </p><p> 最后,我們假定你象已經(jīng)為你的工程由你的組織采用的那樣熟悉JSP 技術(shù),Java 技術(shù)和Java 代碼約定。 如果不,我們推薦你從在這里的Java 技術(shù)和在這里的
5、JSP 技術(shù)開始。 </p><p> 為什么有代碼約定? </p><p> 代碼約定的許多原因?qū)Τ绦騿T和網(wǎng)內(nèi)容開發(fā)者來說是重要的: </p><p> 他們改進(jìn)軟件人工制品的易讀性,</p><p> 他們降低訓(xùn)練管理和努力 </p><p> 他們的機構(gòu)化的約定朝著標(biāo)準(zhǔn)化平衡</p>&l
6、t;p><b> 文件的名字和位置</b></p><p> 命名文件給工具賣方和網(wǎng)絡(luò)容器一種方法來決定文件的類型和相應(yīng)的說明他們</p><p> 下述表格列舉我們建議的文件后綴和位置。 </p><p> 文件類型文件后綴推薦位置</p><p> JSP 技術(shù) .jsp <context ro
7、ot>/<subsystem path>/ </p><p> JSP碎片 .jsp<context root>/<subsystem path>/ </p><p> .jspf<context root>/WEB-INF/jspf/<subsystem path>/ </p><p>
8、 級聯(lián)樣式表 .css <context root>/css/ </p><p> JavaScript 技術(shù) .js <context root>/js/ </p><p> HTML網(wǎng)頁 .html <context root>/<subsystem path>/ </p><p> 網(wǎng)絡(luò)資源 .gi
9、f, .jpg, etc. <context root>/images/ </p><p> 標(biāo)記庫描述符 .tld <context root>/WEB-INF/tld/ </p><p> 當(dāng)讀上面的表格時,有一些事情記住。 首先,<context root>是網(wǎng)絡(luò)應(yīng)用(在一個.war 文件里面的根目錄)的上下文的根。 其次,<subs
10、ystem path>用來提供精煉的動態(tài)和靜止的網(wǎng)頁內(nèi)容的邏輯組。 對小型網(wǎng)絡(luò)應(yīng)用來說,這可能是一根空的串 。</p><p> 第三,我們使用術(shù)語JSP碎片指的是能被歸入另一JSP 網(wǎng)頁的一JSP 網(wǎng)頁。 在JSP 2.0 說明里注意到,術(shù)語"JSP程序段"被改為使用作為術(shù)語"JSP碎片"被超載。 JSP碎片能使用.jsp或者.jspf作為后綴, 并且能分別被安置
11、或者在/WEB-INF/ jspf或者有其余靜止內(nèi)容。 并非整頁總是使用那些后綴.jspf的JSP的碎片應(yīng)該總能被安置在/WEB-INF/ jspf。第4, 雖然JSP 說明為JSP碎片建議.jspf和.jsp為可能的擴展, 我們推薦.jspf同.jsf可能被JavaServer Faces詳細(xì)提出使用。</p><p> 最后, 這是一個通常的方法通常,就是安置描述符庫的描述符文件和任何其他非公眾內(nèi)容在WEB
12、-INF/或者隸屬于它的子目錄之下的方法。 以這種方法,那些內(nèi)容對于那些客戶將越來越不易于接近和看不見 ,因為那些網(wǎng)絡(luò)存儲器將不為隸屬于WEB-INF/的任何文件提供服務(wù)。 </p><p> 一個可選擇的受歡迎的文件的名字, 象在部署描述符(web.xml)的受歡迎文件的要素里申明的那樣, 如果將產(chǎn)生動態(tài)的內(nèi)容,應(yīng)該是index.jsp,或者如果受歡迎的頁網(wǎng)是靜止的,則是index.html。</p&g
13、t;<p> 當(dāng)使JSP 文件國際化時,我們推薦你通過他們的地點把JSP 頁把歸類進(jìn)目錄。 例如,英文版的index.jsp將出現(xiàn)在下/en_US/ index.jsp而那些日本版本的相同文件的出現(xiàn)將在/ja _ JP / index.jsp下。 通常,Java指導(dǎo)課提供關(guān)于使Java 代碼國際化的附加信息, 并且那些利用J2EE 平臺預(yù)先設(shè)計計劃的申請書為企業(yè)提供關(guān)于網(wǎng)應(yīng)用的國際化的信息。</p><
14、;p><b> 文件組織</b></p><p> 一個好的結(jié)構(gòu)的源頭代碼文件不僅容易讀,并且更迅速的在文件內(nèi)部安置信息。 在下面的部分,我們將介紹關(guān)于JSP和標(biāo)記庫描述符文件的結(jié)構(gòu)。 </p><p> JSP 文件/ JSP碎片文件</p><p> 一個JSP文件由以下部分組成,這些部分按順序列出: </p>
15、<p><b> 公開的注釋</b></p><p><b> JSP 網(wǎng)頁指令</b></p><p><b> 可選擇的標(biāo)簽庫指令</b></p><p> 可選擇的JSP 文件申明</p><p> HTML 和JSP 代碼</p>&l
16、t;p><b> 公開的注釋</b></p><p> 一個JSP文件或者碎片文件用一個服務(wù)器方面風(fēng)格的注釋開始</p><p><b> <%-- </b></p><p> - Author(s):</p><p><b> - Date:</b>&l
17、t;/p><p> - Copyright Notice:</p><p><b> - @(#)</b></p><p> - Description: </p><p><b> --%></b></p><p> 這條注釋只在服務(wù)器方面是可見的,因為它在JS
18、P網(wǎng)頁面轉(zhuǎn)換期間被除去。 在這條注釋內(nèi)是作者,日期和修正的版權(quán)申明, 關(guān)于網(wǎng)開發(fā)者的JSP 頁的一個標(biāo)識符和描述。這些"@(#)" 特點的結(jié)合被確定的程序作為指明標(biāo)識符的開始辨認(rèn)。 當(dāng)這樣的程序很少被使用時,使用這個串是沒有害處。 另外, 這結(jié)合有時添加"$Id$"作為鑒定信息自動被插入JSP 網(wǎng)頁中, 以一些版本控制程序。 說明部分提供簡明的關(guān)于JSP 頁的目的的信息。 它不止持續(xù)一個段落。&l
19、t;/p><p> 在有些情況下, 公開的注釋需要在翻譯期間被保留并且真實性和有法律目的傳播到客戶端(對一個瀏覽器可見)。 這可能通過使注釋塊分裂成兩個部分被取得; 首先,客戶端風(fēng)格的注釋: </p><p><b> <!--</b></p><p> - Author(s):</p><p><b>
20、; - Date:</b></p><p> - Copyright Notice:</p><p><b> --></b></p><p> 以及一條更短的服務(wù)器端風(fēng)格的注釋: </p><p><b> <%-- </b></p><p&g
21、t;<b> - @(#)</b></p><p> - Description: </p><p><b> --%></b></p><p><b> JSP 網(wǎng)頁指令</b></p><p> 一個JSP網(wǎng)頁的指令在翻譯同時給與JSP 網(wǎng)頁相關(guān)的確定的指令
22、下定義。 JSP 說明不把限制條件強加給那JSP 頁指令可能被在相同的頁內(nèi)確定。 因此(除了第一個例子在輸出的時候以兩行額外的空白行作為開頭),以下的二個代碼例子相等: </p><p><b> 代碼樣品1: </b></p><p> <%@ page session="false" %></p><p>
23、; <%@ page import="java.util.*" %></p><p> <%@ page errorPage="/common/errorPage.jsp" %></p><p> 如果任何指令的長度, 例如一指令的頁,超過一個JSP 頁(80 個字符)的正常寬度,指令插入多產(chǎn)品: 代碼樣品2: <
24、/p><p> <%@ page session="false" </p><p> import="java.util.*"</p><p> errorPage="/common/errorPage.jsp" </p><p><b> %><
25、;/b></p><p> 通常,例子2 對于指令的頁的代碼樣品來說比代碼第1 樣品是更好的選擇適合確定。 當(dāng)復(fù)雜的JAVA包需要被輸入到JSP 頁時,一個例外發(fā)生,導(dǎo)致非常長時間的輸入把歸于: </p><p> <%@ page session="false"</p><p> import="java.ut
26、il.*,java.text.*,</p><p> com.mycorp.myapp.taglib.*,</p><p> com.mycorp.myapp.sql.*, ..."</p><p><b> ...</b></p><p><b> %></b></p
27、><p> 在這情況內(nèi),象下面一樣拆解這頁指令更合適: </p><p> <%-- all attributes except import ones --%></p><p><b> <%@ page </b></p><p><b> ...</b></p>
28、<p><b> %></b></p><p> <%-- import attributes start here --%></p><p> <%@ page import="java.util.*" %></p><p> <%@ page import=&qu
29、ot;java.text.*" %></p><p><b> ...</b></p><p> 注意到通常,輸入陳述遵循地方代碼約定給JAVA技術(shù)。 例如, 當(dāng)能達(dá)到來自相同的包的3 種種類被使用時,它可能一般被接受為那個, 輸入應(yīng)該申明具體的獨特的類,而不是他們的包裹。 超出3 種種類,決定是分別列舉那些種類還是使用\是一個網(wǎng)開發(fā)者的責(zé)任&qu
30、ot;。 *\"表達(dá)式。 在以前例子中, 鑒定一種外部種類使生活更容易, 特別是當(dāng)你努力找到一種輕便馬車種類或者理解JSP 頁怎樣與Java 代碼相互作用時。 例如, 不通知被輸入的JAVA包就象如下所示的那樣, 為了找到一種用戶種類,一個網(wǎng)開發(fā)者必須通過所有這些包搜尋: </p><p> <%@ page import="com.mycorp.bank.savings.*"
31、; %></p><p> <%@ page import="com.thirdpartycorp.cashmanagement.*" %></p><p> <%@ page import="com.mycorp.bank.foreignexchange.*" %></p><p><
32、b> ...</b></p><p> 在后面例子中,書面JSP 頁更整潔,但是找到種類是難的。 通常,如果一JSP 頁有太多輸入指令,它很可能包含太多Java 代碼。 更好的選擇將是使用更多的JSP 標(biāo)簽(在這篇文章里過后討論)。 可選擇標(biāo)簽庫一指令的標(biāo)簽庫申明風(fēng)俗標(biāo)簽庫以JSP 頁使用的指令(s)。 短的指令被在一條單個的線內(nèi)申明。 多標(biāo)簽庫指令在JSP \ 頁內(nèi)在相同的位置一同被堆積&
33、#39;身體: </p><p> <%@ taglib uri="URI1" prefix="tagPrefix1" %></p><p> <%@ taglib uri="URI2" prefix="tagPrefix2" %></p><p><b
34、> ...</b></p><p> 正象用指令頁, 一指令的標(biāo)簽庫的長度超過一JSP 頁(80 字符)的正常寬度如果,指令插入多產(chǎn)品:</p><p> <%@ taglib </p><p> uri="URI2" </p><p> prefix="tagPrefix2&q
35、uot; </p><p><b> %></b></p><p> 只正被在一頁里使用的標(biāo)簽庫應(yīng)該被輸入。</p><p> 從JSP 1.2 說明, 非常推薦JSP標(biāo)準(zhǔn)標(biāo)簽庫(JSTL)被在幫助降低對JSP scriptlets的需要的你的網(wǎng)申請內(nèi)使用, 在你的頁里。 使用JSTL的頁,通常,容易讀并且保持。 </p>
36、;<p> 可選擇的JSP 申明</p><p> 申明JSP 申明通過一JSP 頁擁有的方法和變量。 這些方法和變量在JAVA編程語言不不同于申明, 因此相關(guān)的代碼約定應(yīng)該被跟隨。 申明被喜歡被包含在單人房里<百分之! ...百分之>塊申明JSP,集中' 身體s在那些\ 頁JSP的一個地區(qū)內(nèi)的申明。 這是一個例子: Disparate declaration blocks
37、Preferred declaration block </p><p> <%! private int hitCount; %></p><p> <%! private Date today; %></p><p><b> ...</b></p><p> <%! pu
38、blic int getHitCount() {</p><p> return hitCount;</p><p><b> }</b></p><p><b> %></b></p><p><b> <%! </b></p><p&
39、gt; private int hitCount;</p><p> private Date today; </p><p> public int getHitCount() {</p><p> return hitCount;</p><p><b> }</b></p><p>
40、;<b> %></b></p><p> HTML 和JSP 代碼</p><p> 這部分的JSP 頁包括JSP網(wǎng)頁HTML主體和JSP代碼,如JSP的表達(dá)式,字體,和JavaBeans的說明。 </p><p><b> 標(biāo)簽庫描述符</b></p><p> 標(biāo)簽庫描述符(T
41、LD)文件必須以合適的XML申明和正確的DTD描述開頭。 例如,一JSP 1.2 TLD 文件必須以下面為開始: </p><p> <?xml version="1.0" encoding="ISO-8859-1" ?></p><p> <!DOCTYPE taglib</p><p> PUBLI
42、C "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"</p><p> "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"></p><p> 這立即隨后有一條服務(wù)器方面風(fēng)格的意見,列舉作者,日期,版權(quán),鑒定信息, 以及關(guān)于庫
43、的短的描述: </p><p><b> <!--</b></p><p> - Author(s):</p><p><b> - Date:</b></p><p> - Copyright Notice:</p><p><b> - @(#)
44、</b></p><p> - Description:</p><p><b> --></b></p><p> 使用這些要素為指南的規(guī)章和指導(dǎo)方針與關(guān)于對為JSP 文件/碎片文件定義的那些是一樣的。</p><p> 文檔剩下部分包含以下部分,以它們出現(xiàn)的順序為序:</p>
45、<p> 對正確的標(biāo)簽庫的可選擇的申明</p><p> 對事件響應(yīng)者的可選擇的申明</p><p> 對一個或多個激活的標(biāo)簽的申明</p><p> 建議你為TLD文檔的要素加入以下可選擇的副要素。這些副要素為標(biāo)簽設(shè)計者提供地址記錄來記錄行為和額外的TLD文檔的信息,然后對網(wǎng)絡(luò)部分開發(fā)者開放它們。</p><p> JS
46、P1.2建議TLD要素</p><p> JSP1.1建議副要素</p><p><b> 副要素</b></p><p> 性質(zhì)描述(JSP1.2)</p><p> 開始程序描述(JSP1.2)</p><p> 標(biāo)簽顯示名稱,描述,例子名,信息</p><p&g
47、t; taglib uri,顯示名稱,uri描述,信息</p><p> 正確描述(JSP1.2)</p><p> 多種描述(JSP1.2)</p><p><b> 首行縮排</b></p><p> 缺口必須被空格符填滿。標(biāo)簽符引起不同編輯者對空格符的不同理解,不能在JSP頁面里使用缺口。除非被特殊集成開
48、發(fā)環(huán)境(IDE)工具限制.這兒是一個例子: </p><p> <myTagLib:forEach var="client" items="${clients}"></p><p> <myTagLib:mail value="${client}" /></p><p> &l
49、t;/myTagLib:forEach></p><p> 持續(xù)缺口會使前一行里固有的點調(diào)整隨后一系列阻塞。持續(xù)缺口是正常缺口復(fù)合的單元(多組的4空符):</p><p> <%@ page attribute1="value1" </p><p> attribute2="value2"</p&
50、gt;<p><b> ...</b></p><p> attributeN="valueN" </p><p><b> %></b></p><p><b> 正本要素的缺口</b></p><p> 當(dāng)一個JSP正本要素
51、(如申明、正本、表達(dá)式)不適合單行,則采用的正本語言缺口條約適合要素主體。主體從同一行開始以要素標(biāo)記<%=開頭,開始新的一行也是以<%=開頭。主體然后以結(jié)束標(biāo)記(%>)在單獨一行表示結(jié)束。如:</p><p> <%= (Calendar.getInstance().get(Calendar.DAY_OF_WEEK)</p><p> =Calendar.SUN
52、DAY) ? </p><p> "Sleep in" : </p><p> "Go to work" </p><p><b> %></b></p><p> JSP,HTML和Java的混合缺口。</p><p> 因為JSP要素混合
53、著Java代碼和暫時文檔,混和缺口對于降低理解JSP來源文件是必要的。這是因為形式上的正常的缺口可能使看見JSP源文件很困難。作為普遍規(guī)則,對每個在另外被引用的要素要使用一個多余的正常缺口單元。注意這會改變客戶端的最終輸出的缺口致使顯示。然而多余的缺口經(jīng)常被瀏覽器忽略,致使瀏覽器上的輸出無效。例如,在TABLE標(biāo)簽前加入多個空格不會改變表格的位置。所以,采用這種缺口形式能使之看上去更好看。 </p><p>&l
54、t;b> <table></b></p><p> <% if ( tableHeaderRequired ) { %></p><p><b> <tr></b></p><p> <th>Last Name</th></p><p&g
55、t; <th>First Name</th></p><p><b> </tr></b></p><p><b> <% } %></b></p><p> <c:forEach var="customer" items="${
56、customers}"></p><p><b> <tr></b></p><p> <td><c:out value="${customer.lastName}"/></td></p><p> <td><c:out value=&q
57、uot;${customer.firstName}"/></td></p><p><b> </tr></b></p><p> </c:forEach></p><p><b> </table></b></p><p>&l
58、t;b> 比這種要好: </b></p><p><b> <table></b></p><p> <% if ( tableHeaderRequired ) { %></p><p><b> <tr></b></p><p>
59、<th>Last Name</th></p><p> <th>First Name</th></p><p><b> </tr></b></p><p><b> <% } %></b></p><p> <c
60、:forEach var="customer" items="${customers}"></p><p><b> <tr></b></p><p> <td><c:out value="${customer.lastName}"/></td><
61、;/p><p> <td><c:out value="${customer.firstName}"/></td></p><p><b> </tr></b></p><p> </c:forEach></p><p><b>
62、 </table></b></p><p><b> 標(biāo)注</b></p><p> 標(biāo)注謹(jǐn)慎的被用來描述多余的信息或者周圍代碼的目的。這里我們看一下兩種JSP文檔的標(biāo)注:JSP和客戶端的評注。</p><p><b> JSP標(biāo)注</b></p><p> JSP標(biāo)
63、注(也稱為服務(wù)端評注)只對服務(wù)端可視(也就是客戶端是無法看見)。純JSP標(biāo)注要比用scripting語言寫的JSP標(biāo)注更好,因為前者不大要依賴于基本的scripting語言,更容易演變成JSP2.0類型的頁面。接下來的表格說明了:</p><p> 用scripting語言標(biāo)注的JSP,JSP純標(biāo)注行</p><p> 單行 <% /** ... */ %></
64、p><p> <% /* ... */ %></p><p> <% // ... %> </p><p> <%-- ... --%></p><p><b> 多行 <% </b></p><p><b> /*
65、</b></p><p><b> *</b></p><p><b> ...</b></p><p><b> *</b></p><p><b> */ </b></p><p><b> %&
66、gt;</b></p><p><b> <%--</b></p><p><b> -</b></p><p><b> ...</b></p><p><b> -</b></p><p><b&
67、gt; -- %></b></p><p><b> <% </b></p><p><b> //</b></p><p><b> //</b></p><p><b> ...</b></p><
68、p><b> //</b></p><p><b> %></b></p><p><b> 客戶端的標(biāo)注</b></p><p> 客戶端的標(biāo)注(<!-- ... -->)能被用來注解發(fā)給用戶關(guān)于反饋的多余信息的反應(yīng)。不應(yīng)該包含服務(wù)端申請或引起反應(yīng)的代碼的行為和內(nèi)部結(jié)
69、構(gòu)的信息。</p><p> 使用客戶端標(biāo)注通常不被鼓勵,因為客戶/用戶不需要讀這些標(biāo)注只要能直接把收到的反饋翻譯過來。真實性和合法性的目的是例外如辨認(rèn)版權(quán)信息像上面描述的。另一個例外就是HTML作者使用少量HTML標(biāo)注能體現(xiàn)HTML文檔結(jié)構(gòu)的方針。如: </p><p> <!-- toolbar section --></p><p><b
70、> ...</b></p><p> <!-- left-hand side navigation bar --></p><p><b> ...</b></p><p> <!-- main body --></p><p><b> ...</b&
71、gt;</p><p> <!-- footer --></p><p><b> ...</b></p><p><b> 多行標(biāo)注阻塞</b></p><p> 一個多行標(biāo)注阻塞,無論它是JSP還是客戶端,由短橫線“-”標(biāo)記。在XML說明書里,雙橫線“——”不允許出現(xiàn)在XML
72、評注阻塞中。所以,為了和這個說明書相容和一貫,沒有雙橫線用在多行評注阻塞點綴評論行中。下面的表格顯示了使用客戶端評注的優(yōu)勢。</p><p><b> <!--</b></p><p><b> - line 1</b></p><p><b> - line 2</b></p>
73、;<p><b> ...</b></p><p><b> --></b></p><p><b> <!--</b></p><p><b> -- line 1</b></p><p><b> -- l
74、ine 2</b></p><p><b> ...</b></p><p><b> --></b></p><p><b> JSP申明</b></p><p> 每個Java代碼段,相同類型變量的申明應(yīng)該在不同的行:</p><
75、;p> 不建議 <%! private int x, y; %></p><p> <%! private int x; %></p><p> <%! private int y; %></p><p> JavaBeans的組成部分不需要申明和使用JSP申明例子但要使用<jsp:useBean>
76、激活標(biāo)簽。</p><p> 總的來說,JSP對變量的申明不提倡因為他們導(dǎo)致使用scripting語言引起買賣邏輯波動和Java代碼進(jìn)入JSP頁面,而該頁面設(shè)計用來展示目的的,由于全局掌握變量的范圍。</p><p> JSP Scriptlets</p><p> 無論標(biāo)簽庫是否提供公式功能只要有可能就避免使用JSP scriptlets。這能使頁面更容易讀
77、和保持,幫助從表現(xiàn)邏輯中區(qū)分事務(wù)邏輯,將會使你的頁面更易發(fā)展成JSP2.0版本的頁面(JSP2.0版本支持但不強調(diào)使用scriptlets)。在下面的例子,每個數(shù)據(jù)類型代表顧客,不同的scriptlet應(yīng)該這樣寫:</p><p> 客戶作為Customers數(shù)組</p><p><b> <table></b></p><p>
78、; <% for ( int i=0; i<customers.length; i++ ) { %></p><p><b> <tr></b></p><p> <td><%= customers[i].getLastName() %></td></p><p> &
79、lt;td><%= customers[i].getFirstName() %></td></p><p><b> </tr></b></p><p><b> <% } %></b></p><p><b> </table></
80、b></p><p><b> 客戶端作為計數(shù)</b></p><p><b> <table></b></p><p> <% for ( Enumeration e = customers.elements();</p><p> e.hasMoreElemen
81、ts(); ) { </p><p> Customer customer = (Customer)e.nextElement();</p><p><b> %></b></p><p><b> <tr></b></p><p> <td><%= cu
82、stomer.getLastName() %></td></p><p> <td><%= customer.getFirstName() %></td></p><p><b> </tr></b></p><p><b> <% } %><
83、/b></p><p><b> </table></b></p><p> 不過,如果一座共同標(biāo)簽庫被使用,在使用用戶的不同的類型方面有一種更高的靈活性。 例如,在JSP內(nèi),標(biāo)準(zhǔn)標(biāo)簽庫,JSP 代碼的下列部分將支持兩個陣列兩個列舉用戶的表現(xiàn): </p><p><b> <table></b
84、></p><p> <c:forEach var="customer" items="${customers}"></p><p><b> <tr></b></p><p> <td><c:out value="${customer.la
85、stName}"/></td></p><p> <td><c:out value="${customer.firstName}"/></td></p><p><b> </tr></b></p><p> </c:forEach>
86、;</p><p><b> </table></b></p><p> 不過,如果一座共同標(biāo)簽庫被使用,在使用用戶的不同的類型方面有一種更高的靈活性。 例如,在JSP內(nèi),標(biāo)準(zhǔn)標(biāo)簽庫,JSP 代碼的下列部分將支持兩個陣列兩個列舉用戶的表現(xiàn): </p><p><b> <%</b></p>
87、;<p> // NOT RECOMMENDED TO BE DONE AS A SCRIPTLET!</p><p> Connection conn = null;</p><p><b> try {</b></p><p> // Get connection</p><p> Initi
88、alContext ctx = new InitialContext();</p><p> DataSource ds = (DataSource)ctx.lookup("customerDS");</p><p> conn = ds.getConnection();</p><p> // Get customer names<
89、/p><p> Statement stmt = conn.createStatement();</p><p> ResultSet rs = stmt.executeQuery("SELECT name FROM customer");</p><p> // Display names</p><p> whil
90、e ( rs.next() ) {</p><p> out.println( rs.getString("name") + "<br>");</p><p><b> }</b></p><p> } catch (SQLException e) {</p><p&
91、gt; out.println("Could not retrieve customer names:" + e);</p><p> } finally {</p><p> if ( conn != null ) </p><p> conn.close();</p><p><b> }</
92、b></p><p><b> %></b></p><p> JSP 代碼的下列部分更好, 作為代表它那些與數(shù)據(jù)庫那兒相互作用在myTags 標(biāo)簽?zāi)切╋L(fēng)俗:隱藏那些從屬性的那些它實施的代碼數(shù)據(jù)庫的密封并且的dataSource: </p><p> <myTags:dataSource</p><p
93、> name="customerDS"</p><p> table="customer" </p><p> columns="name"</p><p> var="result" /></p><p> <c:forEach va
94、r="row" items="${result.rows}"></p><p> <c:out value="${row.name}" /></p><p><b> <br /></b></p><p> </c:forEach><
95、;/p><p> 結(jié)果以風(fēng)俗介紹的一個寫稿的變量把myTags:dataSource并入保存挽回那些用戶從用戶數(shù)據(jù)庫的名字的結(jié)果。 JSP 代碼也能提高產(chǎn)生不同種類的產(chǎn)量(HTML,XML,WML)基于客戶動力需要, 沒有影響后端代碼(對dataSource 標(biāo)簽來說)。 一種更好的選擇將授予進(jìn)行數(shù)據(jù)檢索的一位前面控制人員servlet這, 提供給JSP 頁通過請求scoped的結(jié)果把歸于。 看見JAVA一個例子的
96、藍(lán)圖的企業(yè)部分。 總之: JSP scriptlets 應(yīng)該最好在JSP 頁里是不存在的,以便JSP 頁不依賴命令式語言程序, 并且在JSP 頁內(nèi)的業(yè)務(wù)邏輯實施被避免。 如果不可能, 使用價值目標(biāo)(零部件JavaBeans)適合把信息傳播往返于那些邊服務(wù)器,并且用JSP scriptlets 改變價值反對客戶產(chǎn)量。 使用風(fēng)俗標(biāo)簽(標(biāo)簽處理機)無論何時適合被處理的信息在服務(wù)器面上可提供。 JSP 表達(dá)方式JSP 表達(dá)方式應(yīng)該被使用就和JS
97、P Scriptlets一樣節(jié)約。 為了說明這,讓\ ' s作為完成等效的任務(wù)的以下的3 個例子看: </p><p> Example 1 (with explicit Java code): </p><p> <%= myBean.getName() %></p><p> Example 2 (with JSP tag):</
98、p><p> <jsp:getProperty name="myBean" property="name" /></p><p> Example 3 (with JSTL tag):</p><p> <c:out value="${myBean.name}" /></p&
99、gt;<p> 例子1以為一個寫稿的稱為myBean的變量被申明。 其它二個例子以為myBean,scoped把可能被發(fā)現(xiàn)使用PageContext.findAttribute歸于()。 也的第2 例子以為myBean被介紹到那些頁使用。 在3 個例子中,JSTL 標(biāo)簽例子被更喜歡。 它幾乎象JSP 表示一樣短,讀是一樣容易的,更容易保持, 并且它不依賴JAVA scriptlets(哪個將要求網(wǎng)開發(fā)者熟悉語言和API打
100、電話)。 而且,逐步形成成JSP 2.0個體例程序設(shè)計更容易做頁,在那里等價物可能通過僅僅打印美元被完成 {myBean.name }用模板正文。 那選擇收養(yǎng),在開發(fā)者和在生產(chǎn)JSP 頁在相同的工程內(nèi)的全部始終如一的網(wǎng)中一致同意。 應(yīng)當(dāng)指出 JSTL例子實際上有點不同它得myBean從頁上下文的價值而不是從寫稿易變的一地方JAVA那里。 最后,JSP 表達(dá)方式比依賴基礎(chǔ)的寫稿的語言的句法的相等的JSP scriptlets有優(yōu)先權(quán)。 例
101、如, </p><p> <%= x %> 被結(jié)束更喜歡 <% out.print( x ); %></p><p> 白色空間白色空間更進(jìn)一步以美化JSP 代碼降低含義和維護(hù)努力提高凹口。 尤其,空白的線和空間必要的話應(yīng)該在一個JSP 文件里被在各種各樣的位置插入。 空白的空白產(chǎn)品產(chǎn)品節(jié)約被使用改進(jìn)可讀性那兒<罷工>頁JSP, 假若他們不對生
102、產(chǎn)產(chǎn)生不需要的影響。 對于下面的例子來說, 一空白產(chǎn)品在二JSP表情在街區(qū)叫的<預(yù)>的一HTML 里面之間插入引起一額外產(chǎn)品在可見的HTML 產(chǎn)量內(nèi)插入, 在內(nèi)客戶\ ' s 瀏覽器。 如果那些空白產(chǎn)品不在里面,不過一<預(yù)>塊,那些影響不可見在那些\ 瀏覽器內(nèi)',產(chǎn)量s。</p><p> 對客戶的JSP 陳述HTML 生產(chǎn) </p><p>&l
103、t;b> <pre></b></p><p> <%= customer.getFirstName() %></p><p> <%= customer.getLastName() %></p><p><b> </pre></b></p><p&g
104、t;<b> Joe</b></p><p><b> Block</b></p><p><b> <pre></b></p><p> <%= customer.getFirstName() %></p><p> <%= custo
105、mer.getLastName() %></p><p><b> </pre></b></p><p><b> Joe</b></p><p><b> Block</b></p><p> <%= customer.getFirstName
106、() %></p><p> <%= customer.getLastName() %></p><p><b> Joe Block</b></p><p> 空白一白色的空格符(顯示為)應(yīng)該被在一個JSP 標(biāo)簽和它的身體之間插入。 例如,如下內(nèi)容 </p><p> <%= custo
107、mer.getName() %>更喜歡結(jié)束 <%=customer.getName()%></p><p> 也應(yīng)該有分開JSP 意見標(biāo)簽和意見的空格符: </p><p><b> <%--</b></p><p> - a multi-line comment broken into pieces, ea
108、ch of which</p><p> - occupying a single line.</p><p><b> --%></b></p><p> <%-- a short comment --%></p><p> 使用命名約定的命名約定制造你的更容易鑒定,在工程里分類并且協(xié)調(diào)的網(wǎng)零
109、部件要素。 在這個部分里,我們將看僅限于JSP 技術(shù)的這些約定。 JSP名字一個JSP(文件)名字應(yīng)該總是從一個小寫字母開始。 名字可能由多話組成,在這種情況下,話安置立即臨近和每句話從一個大寫字母開始。 一個JSP名字可能只是簡單的名詞或者一個短的句子。 一個僅用于動詞的JSP名字應(yīng)該被避免,因為它不把足夠的信息傳送給開發(fā)者。 例如: </p><p> perform.jsp不像 performLogin.
110、jsp 那么清楚</p><p> 就一個動詞作為一個JSP名字的一部分而論, 現(xiàn)在時形式應(yīng)該使用,一行動經(jīng)由處理的后端被表示: </p><p> showAccountDetails.jsp被結(jié)束更喜歡 showingAccountDetails.jsp </p><p> 標(biāo)簽名字標(biāo)簽處理機和相關(guān)種類的命名約定被顯示如下: </p><
111、;p> Description Class Name </p><p> XXX tag extra info (extending from javax.servlet.jsp.tagext.TagExtraInfo) XXXTEI </p><p> XXX tag library validator (extending from javax.servlet.jsp.ta
112、gext.TagLibraryValidator) XXXTLV </p><p> XXX tag handler interface (extending from javax.servlet.jsp.tagext.Tag/IterationTag/BodyTag) XXXTag </p><p> XXX tag handler implementation XXXTag <
113、;/p><p> 另外,標(biāo)簽名字不可而在相關(guān)代碼習(xí)俗給JAVA技術(shù)內(nèi)指定違犯班級和接口的命名約定。 為了更進(jìn)一步離其他種類區(qū)分一種相關(guān)標(biāo)簽的種類,包裹后綴,標(biāo)簽或者taglib 能被用于種類的包裹名字。 例如: </p><p> com.mycorp.myapp.tags.XXXTag</p><p> 前綴標(biāo)簽應(yīng)該的名字前綴標(biāo)簽一短然而箱標(biāo)題和下檔那些第一個字
114、符有意義名詞。 一個附加語前綴不應(yīng)該包含非字母字符。 這是一些例子:</p><p> Example OK? </p><p> mytaglib no </p><p> myTagLib yes </p><p> MyTagLib no </p><p> MyTagLib1 no </p>
115、;<p> My_Tag_Lib no </p><p> My$Tag$Lib no </p><p> 用XML句法JSP的JSP 頁提供兩不同的句法: 為為寫JSP 頁作為一份XML 資料寫JSP 頁和\"XML句法\"的\"標(biāo)準(zhǔn)句法\"。 被使用標(biāo)準(zhǔn)句法寫的JSP 頁被稱為\"JSP 頁。 \"被使用X
116、ML句法寫的JSP 頁被稱為\"JSP 資料\"。 主要的這篇文章地址JSP 頁,但是大多數(shù)概念也能被用于JSP 資料。 當(dāng)XML 變得更流行時,使用JSP 資料預(yù)計增加, 寄給這JSP 2.0種說明將介紹友好得多的XML句法。 應(yīng)當(dāng)指出XML句法常常作者JSP 頁與不同,并且經(jīng)常同混淆起來XML一JSP 頁的意見。 頁作者對作者使用標(biāo)準(zhǔn)或者XML句法一JSP 頁。 集裝箱然后翻譯進(jìn)它XML 意見的JSP 頁,哪個是
117、與接觸給庫Validators加標(biāo)簽。 </p><p> JSP 資料結(jié)構(gòu)JSP 資料有以下的基本的結(jié)構(gòu): </p><p> <? xml version="1.0" ?></p><p><b> <!-- </b></p><p> - Author(s): <
118、/p><p><b> - Date:</b></p><p> - Copyright Notice:</p><p><b> - @(#)</b></p><p> - Description:</p><p><b> --></b>
119、</p><p> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"</p><p> xmlns:prefix1="URI-for-taglib1"</p><p> xmlns:prefix2="URI-for-taglib2"<
120、/p><p> version="1.2"></p><p> JSP Document ...</p><p> </jsp:root></p><p> 首行是把頁定義為一份XML 資料的一篇可選擇的XML序言。 在可選擇的序言為資料變成那些意見之后。 那些元素作為資料JSP 確定這并且出現(xiàn)不作為
121、那些元素根必須。 jsp namespace 必須被輸入,并且全部標(biāo)簽庫必須被使用這種根要素輸入。 版本把歸于要求并且指定JSP 說明的版本正被使用哪個。 真實滿足那些JSP的資料作為subelements 出現(xiàn)一定被被等效的他們的XML那里替換,例如。 欲了解詳細(xì)信息,參見JSP 說明。 XML 說明JSP 指定對是否XML 樣式說明被在生產(chǎn)上拆開不清楚, 因此如果一條意見意圖是達(dá)成客戶,是安全的, 它應(yīng)該隨函附上在內(nèi)一節(jié)點,如下:
122、</p><p><b> ...</b></p><p> <jsp:text><![CDATA[</p><p><b> <!--</b></p><p> - Multiline comment</p><p> - to be se
123、nt to client.</p><p><b> --></b></p><p> ]]></jsp:text></p><p><b> ...</b></p><p> 在JSP 資料里的Java 代碼, 當(dāng)在申明,scriptlets 和表情里面給JAVA代
124、碼寫信時,一種CDATA 要素只應(yīng)該被使用, 必要保證你的代碼不傳播開資料結(jié)構(gòu)時。 </p><p><b> ...</b></p><p> <jsp:scriptlet></p><p> for( int level = 0; level < 3; level++ ) {</p><p
125、> </jsp:scriptlet></p><p><b> <tr></b></p><p><b> <td></b></p><p> <jsp:expression><![CDATA[</p><p> "&l
126、t;h" + level + ">Text</h" + level + ">"</p><p> ]]></jsp:expression></p><p><b> </td></b></p><p><b> </tr>
127、;</b></p><p> <jsp:scriptlet></p><p><b> }</b></p><p> </jsp:scriptlet></p><p><b> ...</b></p><p> 與在標(biāo)準(zhǔn)句法方面的
128、那些不同,不管一種要素的內(nèi)容,XML 凹口規(guī)章應(yīng)該被跟隨。 編程慣例通常,避免寫JAVA代碼(申明,scriptlets 和表情)在你的JSP 頁內(nèi),適合下列理由: 用在一JSP 頁里的Java 代碼的句法錯誤直到頁被部署才被發(fā)現(xiàn)。 用標(biāo)簽庫和servlets的句法錯誤, 另一方面,在部署之前被發(fā)現(xiàn)。 在JSP 頁里的Java 代碼更難調(diào)試。 特別為可能不是Java專家的頁作者,在JSP 頁里的Java 代碼更難保持。 不使復(fù)雜的業(yè)務(wù)邏
129、輯與贈送邏輯混合一般被接受為實踐。 JSP 頁主要傾向于贈送邏輯。 包含Java 代碼,HTML 的代碼和為指令寫稿子的另一個可能難讀。 JSP 2.0 說明是贊成一種非常簡單表達(dá)式語言的deemphasizing scriptlets。 如果Java 代碼沒被在你的頁里使用,把你的JSP 頁逐步形成成JSP 2.0個體例程序設(shè)計將更容易。 看見JAVA更多的指南和細(xì)節(jié)的藍(lán)圖的企業(yè)部分。 JavaBeans 零部件預(yù)置JSP 技術(shù)提供一
130、種便利的要素初始化全部PropertyDescriptor 鑒定的一個JavaBeans 零部件的特性</p><p> <jsp:setProperty name="bankClient" property="*"/></p><p> 不過,這應(yīng)該被謹(jǐn)慎使用。 首先,如果豆有特性,比如說,數(shù)量, 并且在當(dāng)今的ServletRequ
131、est 物體里沒有這樣的參數(shù)(數(shù)量)或者參數(shù)價值是\"\",沒有什么被做: JSP 頁甚至不使用空行確定豆的那特別的財產(chǎn)。 因此,任何價值已經(jīng)被分配在bankClient 豆內(nèi)合計未受影響。 第二, 不讓人確定PropertyEditors的非初步特性可能不含蓄從ServletRequest 物體的線價值初始化,明確變換可能被需要。 第三,存心不良的用戶能增加另外的請求參數(shù)并且確定豆的非故意的特性,如果應(yīng)用沒被仔細(xì)設(shè)
132、計。 你仍然喜歡使用財產(chǎn)= \"* \"在jsp內(nèi):為了生產(chǎn)更整潔的代碼的setProperty 標(biāo)簽, 然后我們推薦,那你增加意見在之前那些jsp:大約參數(shù)的標(biāo)簽setProperty 期望存在于要初始化那些豆的目標(biāo)ServletRequest。 因此,在下列例子里,從意見我們知道firstName和lastName被要求初始化bankClient 豆: </p><p><b>
133、 <%--</b></p><p> - requires firstName and lastName from the ServletRequest </p><p><b> --%></b></p><p> <jsp:setProperty name="bankClient"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機畢業(yè)論文外文翻譯
- 計算機英語畢業(yè)論文外文翻譯
- 計算機專業(yè)畢業(yè)論文外文翻譯7
- 計算機畢業(yè)論文外文翻譯--asp概述
- 計算機專業(yè)畢業(yè)論文外文翻譯15
- 計算機專業(yè)畢業(yè)論文外文翻譯--計算機病毒介紹
- 計算機專業(yè)畢業(yè)論文外文翻譯2篇
- 計算機專業(yè)畢業(yè)論文翻譯
- 鍋爐的計算機控制畢業(yè)論文外文翻譯
- 無線局域網(wǎng)-計算機畢業(yè)論文外文翻譯
- 計算機畢業(yè)論文范文畢業(yè)論文計算機專業(yè)
- 計算機畢業(yè)論文外文翻譯---面向?qū)ο蠛蚦++
- 計算機畢業(yè)論文
- 計算機畢業(yè)論文
- 計算機專業(yè)畢業(yè)論文外文翻譯--數(shù)據(jù)傳送指令
- 計算機專業(yè)畢業(yè)論文外文翻譯--數(shù)據(jù)類型和值域
- 計算機專業(yè)畢業(yè)論文---報表設(shè)計器開發(fā)(含外文翻譯)
- 計算機畢業(yè)論文文獻(xiàn)翻譯資料
- 計算機專業(yè)畢業(yè)論文外文翻譯--輸入輸出訪問
- 計算機專業(yè)畢業(yè)外文翻譯
評論
0/150
提交評論