先給大家看1段JSP的代碼,看看有甚么感受?
這就是攙雜著Java代碼的JSP頁面,它的不足的地方不言而喻:
(1)jsp保護難度增加;
(2)出錯提示不明確,不容易調試;
(3)分工不明確,美工人員還需要了解Java代碼;
上述3點,終究會增加程序的開發本錢;
解決上面的問題就出現了JSTL和EL表達式,JSTL使JSP開發者可以減少對腳本元素的需求,乃至可以不需要它們,下降代碼工作量,界面更加簡潔,便于保護,后臺java人員和前真個美工人員可以分工合作,從而可提高團隊開發的效力。
那末究竟甚么是JSTL呢?甚么是EL表達式呢?為何每次說到JSTL都要說到EL表達式呢?它們二者究竟是甚么關系呢?又有甚么區分呢?且看下面漸漸說來~
1、甚么是JSTL?
JSTL是1個不斷完善的開放源代碼的JSP標簽庫。JSTL1.0由4個定制標記庫(core、format、xml和 sql)和1對通用標記庫驗證器組成。
(1)core 標記庫提供了定制操作,通過限制了作用域的變量管理數據,和履行頁面內容的迭代和條件操作。它還提供了用來生成和操作 URL的標記;
(2)format標記庫定義了用來格式化數據(特別是數字和日期)的操作;
(3)xml庫包括1些標記,這些標記用來操作通過XML表示的數據;
(4)而 sql庫定義了用來查詢關系http://www.vxbq.cn/db/的操作。
2、甚么是EL表達式?
EL表達式主要用于查找作用域中的數據,然后對它們履行簡單操作;它不是編程語言,乃至不是腳本編制語言。通常與 JSTL標記1起作用,能用簡單而又方便的符號來表示復雜的行動。
EL表達式的格式:用美元符號($)定界,內容包括在花括號({})中。例如: ${PageScope.UserName}。再次對此不再贅述,網上有很多極其詳細的使用教程。
3、EL表達式變量的作用域?
EL隱含對象:pageScope,requestScope,sessionScope,applicationScope。作用域范圍順次從小到大。
EL名稱/ JSTL名稱 |
有效范圍 |
PageScope / Page |
用戶要求此頁面進程 |
RequestScope / Request |
用戶的全部要求進程 |
SessionScope / Session |
用戶的全部會話期 |
ApplicationScope / Application |
WEB利用程序履行期間 |
當${username}不寫明變量作用域時,默許按上述順序查找變量,找到就返回,不再繼續找;但是如果全部的范圍都沒找到,則返回null。如果寫明作用域,則搜索進程以下:
實例 |
說明 |
${ PageScope .UserName} |
獲得Page范圍內的 UserName |
${ RequestScope.UserName} |
獲得Request范圍內的UserName |
${SessionScope.UserName} |
獲得Session范圍內的UserName |
${ ApplicationScope.UserName} |
獲得Application范圍內的UserName |
4、JSTL和EL表達式有何區分?
(1)功能:EL是用來顯示數據的,功能跟<%=表達式%>1樣,但是它的功能有限,如:針對空給出默許的非空字符串輸出,迭代循環數組元素等是沒法實現的。而JSTL則彌補了上述問題,它經常使用來實現網頁邏輯判斷和迭代顯示,功能跟<%程序代碼%>1樣。所以,1般情況下,我們都會選擇JSTL配合EL表達式1起使用,這樣基本可以實現JSP中不出現Java代碼。
(2)配置:JSTL和EL表達式都是自定義標簽,web server容器會把jsp 解析成servlet,在解析的進程中調用解析器,這個解析器集合就包括EL、JSTL等解析器。
但是EL是servlet標準,容器中都會集成所以我們在使用EL表達式時不需要援用任何東西;而JSTL則需要引入它的包方可以使用。引入方法以下:使用taglib指令---用來唆使這個JSP頁面所使用的標簽庫<%@ taglib uri=" " prefix=" " %>
(3)空值處理:當搜索全部范圍后仍沒有數據時,會返回NULL,但是EL表達式對此做出了優化,頁面上顯示空白,而不是打印輸出NULL。而JSTL則是優化的更加完全,當返回NULL時,通過JSTL可以返回“無”。
現在,對JSTL和EL表達式有了基本了解了,其實說白了就是1句話:二者結合,完全消除JSP頁面的Java代碼!