摘 要:JSP WEB應用程序系統(tǒng)開發(fā)因為涉及到面向對象語言Java而使眾多學習者感到困難,本文就JSP2.0中引入的EL新特性并結合JSTL1.2規(guī)范討論了JSP頁面快速開發(fā)的新的途徑和方法。
關鍵詞:Java語言 EL表達式語言 JSTL規(guī)范 標記庫
引言
WEB應用程序設計(JSP)是高職院信息技術專業(yè)學生的專業(yè)必修課程,但是有些Java語言基礎薄弱的同學會感覺學習困難,很多同學在畢業(yè)后參加信息產(chǎn)業(yè)部等部門組織的相應專業(yè)職業(yè)技能考證考試時感到束手無策,因為JSP中大量動態(tài)內容的邏輯需要通過Java代碼段來實現(xiàn)。JSTL(JSP Standard Tag Library,JSP標準標記庫)規(guī)范的發(fā)布和JSP 2.0新特性EL(Expression Language,表達式語言)的引入,為不習慣Java語言或者不熟悉Java語言的WEB設計開發(fā)人員提供了一個JSP開發(fā)的新途徑,它簡化了程序,提高了程序的可讀性和可維護性。
優(yōu)勢與實現(xiàn)
JSTL規(guī)范是由JCP(Java Community process program)開放性組織發(fā)展完善的。JSTL1.0始發(fā)布于2002年6月,目前最新版本是JSTL1.2。JSTL實際上可以看作是一組基于XML語法的自定義標記形成的標記庫。JSTL提供五個標準標記庫(core核心、internationalization/format(國際標準化/格式)、XML、SQL和function函數(shù))并支持EL。EL是2003年發(fā)布的JSP 2.0引入的最主要的新特性,它用簡單語法定義了表達式語言。在JSTL標記中,可以靈活使用EL表達式,提供了一個用EL表示的強大的屬性集,使得JSP動態(tài)表示層技術開發(fā)可以完全脫離Java腳本代碼。
目前Tomcat 6 Web服務器中不自動包含對JSTL的支持,所以在使用JSTL之前須在SUN的JSTL頁面(http://java.sun.com/products/jsp/jstl)下載JSTL規(guī)范(一些.JAR文件)。JSTL有以下三個安裝配置步驟:①將JSTL實現(xiàn)庫文件jstl.jar和standard.jar以及標記庫描述文件夾tld拷貝到Tomcat Webapps的WEB-INF下。②修改web.xml(Web應用配置文件),在其中定義五類標準標記庫所對應的.tld(標記庫描述文件)的URI。例如在使用核心標記庫之前,須編輯web.xml并在其中添加如下代碼:
<taglib-uri>http://java.sun.com/jsp/jstl/core
<taglib-location>/WEB-INF/tld/c.tld
③在JSP頁面開頭用taglib標記庫指令指定要使用的標記庫。比如,要使用JSTL core標記庫,EL 版本的taglib偽指令為:
<%taglib uri=http://java.sun.com/jsp/jstl/core\"prefix=\"c\"%>
其中:c是核心標記庫的前綴名(可由用戶指定或用系統(tǒng)約定前綴c),它在使用標記庫標記時用到。例如:out是核心庫4個通用標記之一,
格式一:<c:out value=\"${Expression}\"/>
格式二:<c:out value=\"Expression\" default=\" Expression\" escapeXml=\"boolean\"/>
其中:value屬性是輸出到JSP頁面的表達式。當escapeXml屬性值為“true”時,可以將HTML/XML標記符號(如<、>、、/等)直接作為字符串輸出;當value屬性的值為1時,default屬性用來設置輸出的默認值。
${ Expression }是EL表達式。可以用EL表達式語言而不用Java代碼段來指定JSTL的屬性值,所有的EL表達式都是被${}括起來的。
EL提供了對JSP對象的簡明訪問和對象屬性的簡單表示。例如,輸出JSP對象uName的值:
Java腳本語言表示為:
<%String uName=(String)request.getAttribute(“uName”);
Out.println(uName);%>
而EL表示為:${uName},其簡單明了顯而易見。
下表1列出了EL中11個隱含對象。JSP和EL隱含對象中只有一個公共對象(pageContext)。但是EL可以通過pageContext訪問所有另外八個JSP隱含對象。實際上,這是將pageContext包括在EL隱含對象中的主要理由。

以獲取“用戶注冊登錄”表單信息的處理程序為例:
使用EL param獲取用戶提交的數(shù)據(jù),可以簡單表示為:
姓名:${param.name}性別:${param.sex}E-mail:${param.email} ... ...
其中,name、sex、email等分別是提交表單的控件名。
最后,以JSP開發(fā)《班級論壇》實例項目為例:
DbQuery.jsp是一個查詢數(shù)據(jù)庫的頁面。我們在MySQL數(shù)據(jù)庫classbbs中創(chuàng)建了擁有全部權限的用戶cq(password:admin)及數(shù)據(jù)庫表stud。運行http://localhost:8080/proj/BBS/ DbQuery.jsp后將可以顯示stud表中的全部記錄的相關內容。(在開源項目eclipse下編輯編譯運行通過)。
<!-- DbQuery.jsp -->
<%@ page contentType=\"text/html;charset=GBK\" %>
<!—1.指定要使用的SQL標記庫和核心標記庫 -->
<%@ taglib prefix=\"sql\" uri=\"http://java.sun.com/jsp/jstl/sql\" %>
<%@ taglib prefix=\"c\" uri=\"http://java.sun.com/jsp/jstl/core\" %>
<!—2.設置數(shù)據(jù)源并保存在datas中 -->
<sql:setDataSource url=\"jdbc:mysql://localhost:4097/classbbs\"
driver=\"com.mysql.jdbc.Driver\" user=\"cq\" password=\"admin\" var=\"datas\"/>
<!—3.執(zhí)行一個數(shù)據(jù)庫查詢并將結果保存在res中 -->
<sql:query sql=\"select *from stud\" var=\"res\" dataSource=\"${datas}\"/>
<!—4.顯示查詢結果 -->
<html><body><table border=\"1\">
<tr><th>姓名</th><th>留言</th><th>提交時間</th></tr>
<c:forEach var=\"row\" items=\"${res.rows}\">
<tr><td><c:out value=\"${row.name}\"/></td>
<td><c:out value=\"${row.say}\"/></td>
<td><c:out value=\"${row.submit}\"/></td></tr>
</c:forEach></table></body></html>
結語
JSTL的core標記庫中提供了所有JSP頁面常用功能的集合;SQL標記庫提供了對數(shù)據(jù)庫的訪問支持;此外Internationalization/format標記庫提供了國際化(I18N)標記集和數(shù)字、日期等的相關標記集用以處理數(shù)據(jù)顯示的國際化和格式化;XML標記庫提供了對XML語言的支持;function標記庫提供了對函數(shù)的支持等等。JSTL和EL以巨大的優(yōu)勢簡化了JSP的WEB開發(fā)。限于篇幅,我們只對其中的core和SQL標記庫給出了應用實例,希望對喜歡用JSP開發(fā)web應用而又畏懼Java語言的同學會有所幫助。
參考文獻:
[1]陳旭東,劉迪人.JSP2.0應用教程[M].清華大學出版社,2006.
[2]林上杰,林康司.JSP2.0技術手冊[M].電子工業(yè)出版社,2005.