溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

雜談 Taglib、EL、OGNL

發(fā)布時(shí)間:2020-07-21 01:25:47 來源:網(wǎng)絡(luò) 閱讀:355 作者:jjjssswww 欄目:網(wǎng)絡(luò)安全

本篇主要是自己對(duì) JavaWeb中 EL、OGNL、Taglib 個(gè)人理解。

   因?yàn)橐陨蟽?nèi)容都是在 JSP 的基礎(chǔ)下產(chǎn)生的概念, 首先得說說我眼中的 JSP。

   她自由的、奔放的,就像遼闊的大海,跨越任何服務(wù)器屏障、運(yùn)行在各種平臺(tái)。

   她能容納下各種形式的代碼和標(biāo)簽庫,Java 原生代碼、JSTL 表達(dá)式、Struts Taglib 、JSF Taglib 、Webwork Taglib ....任何人自定義的各種標(biāo)簽。

   Web 視圖層的基本思想已被 JSP 闡述的淋漓盡致,但 IT 領(lǐng)域人們不喜歡陽關(guān)積極的老人。

   眼下琳瑯滿目的模版引擎以其靈活的表現(xiàn)形式和簡(jiǎn)潔的書寫方式大有取締 JSP 的勢(shì)頭。

雜談 Taglib、EL、OGNL

回到頂部

1. Taglib(tag library) 標(biāo)簽庫

   JSP 中原生的 java 代碼,總是給人一種雜亂的感覺,與整個(gè) JSP 頁面不搭調(diào)。

   而且增加維護(hù)難度和成本、前端 JSP 美工也必須是程序員、增加程序開發(fā)成本。

   Taglib 是在這種前提下孕育而生,在很久以前已經(jīng)被很多 Javaweb mvc 框架采用和擴(kuò)展,發(fā)揚(yáng)廣大。

   小巧活潑的 Taglib 將雜亂的原生 java 代碼移出了 JSP 的世界,還原了 JSP 原本整潔干凈的樣子。

   未引入 taglib 實(shí)例代碼:

雜談 Taglib、EL、OGNL

<% @page import="cn.javass.user.UserModel" %>  <% UserModel user = (UserModel)request.getAttribute("user"); %>  <table border="1">  
    <tr>  
        <td colspan="2">用戶信息</td>  
    </tr>  
    <tr>  
        <td>姓名</td>  
        <td><%=user.getName()%></td>  
    </tr>  
    <tr>  
        <td>年齡</td>  
        <td><%=user.getAge()%></td>  
    </tr>  </table>

雜談 Taglib、EL、OGNL

   引入 struts <c:/>標(biāo)簽和 EL 表達(dá)式 實(shí)例代碼:

雜談 Taglib、EL、OGNL

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  <table border="1">  
    <tr>  
        <td colspan="2">用戶信息</td>  
    </tr>  
    <tr>  
        <td>姓名</td>  
        <td><c:out value="${user.name}"/></td>  
    </tr>  
    <tr>  
        <td>年齡</td>  
        <td><c:out value="${user.age}"/></td>  
    </tr>  </table>

雜談 Taglib、EL、OGNL

   可能是業(yè)務(wù)邏輯不夠復(fù)雜,所以你可能沒有滿臉絡(luò)腮胡子的大叔,變?yōu)殛柟饣顫姷男□r肉的感覺,沒關(guān)系,聽我慢慢道來。

   下面是比較主流的一些 TagLib,和具體的參考資料:

   由 apache 開發(fā)維護(hù)的 JSTL(JSP Standard Tag Library),具體參考資料: http://www.runoob.com/jsp/jsp-jstl.html

   Struts2 Taglib : http://www.blogjava.net/hwpok/archive/2008/10/12/233853.html

   webwork Tablib:http://wenku.baidu.com/link?url=EjR9GEfZUMw9nW3Asq6OUSTmXAuKf018QDV7

   當(dāng)然你也可以自定義擴(kuò)展 Taglib:http://www.cnblogs.com/edwardlauxh/category/277227.html

回到頂部

2. EL(Expression Language) 表達(dá)式

   EL 設(shè)計(jì)靈感來自于 ECMAScript 和 XPath 表達(dá)式語言,它提供了在 JSP 中簡(jiǎn)化表達(dá)式的方法。

   EL 依次從Web Page、Request、Session、Application 范圍查找值,同樣也能從定義的隱式對(duì)象 pageScope、requestScope、sessionScope和applicationScope 中獲取數(shù)據(jù)。

   EL 既不是編程語言、也不是腳本語言、最佳搭檔為 JSTL,能使用簡(jiǎn)單方便的符號(hào)來表達(dá)和操作復(fù)雜的行為。

   不引入 EL 和 JSTL,Java 原生代碼 HTML 中渲染數(shù)據(jù)代碼示例:

雜談 Taglib、EL、OGNL

<% 
      for (User user : UserList) { 
%>
        <h6>遍歷的當(dāng)前用戶名稱:<%=user.getName()%></h6>
        <h6>遍歷的當(dāng)前用戶組織機(jī)構(gòu):<%=user.getOrg()%></h6><% 
       } 
%>

雜談 Taglib、EL、OGNL

  引入 EL 和 JSTL代碼實(shí)例:

<c:forEach var="user" items="${userList}" >
    <h6>遍歷的當(dāng)前用戶名稱:<c:out value="${user.name}"/></h6>
    <h6>遍歷的當(dāng)前用戶組織機(jī)構(gòu):<c:out value="${user.org}"/></h6></c:forEach>

   ${userList} 為 EL 取值,<c:forEach> <c:out> 為 JSTL 循環(huán)和輸出標(biāo)簽,引入 EL 和 JSTL 后的代碼是不是簡(jiǎn)潔、易懂?

   至于 EL 和 JSTL 的使用方式和書寫規(guī)則,參考資料:

   EL :https://my.oschina.net/passer007/blog/610380

   JSTL: http://www.runoob.com/jsp/jsp-jstl.html

   這些東西羅列出來沒意義,遇到具體項(xiàng)目和具體業(yè)務(wù)規(guī)則時(shí),進(jìn)行搜索吧。

回到頂部

3. OGNL(Object-Graph Navigation Language) 對(duì)象圖航語言

   OGNL 是 EL 的升級(jí)版,最佳搭檔一般為 struts <s:/> 和 webwork <ww:/> 等框架標(biāo)簽庫配合使用。

   OGNL 提供了很多高級(jí)而必須的特性,例如強(qiáng)大的類型轉(zhuǎn)換功能,靜態(tài)或?qū)嵗椒ǖ膱?zhí)行,跨集合投影,以及動(dòng)態(tài) lambda 表達(dá)式定義等。

   OGNL 的計(jì)算圍繞著 OGNL 上下文進(jìn)行,可以在屬性驅(qū)動(dòng)的框架如 struts、webwork..值棧中增、刪、改、查數(shù)據(jù)。   

   引入 OGNL 和 struts <s:/> 標(biāo)簽庫頁面渲染代碼實(shí)例:

<s:iterator var="user" value="${userList}" id="user" status="status">
    <h6>當(dāng)前對(duì)象索引:<s:property value="#status.index"/></h6>
    <h6>遍歷的當(dāng)前用戶名稱:<s:property value="user.name"/></h6>
    <h6>遍歷的當(dāng)前用戶組織機(jī)構(gòu):<s:property value="user.org"/></h6></s:iterator>

   #status.index 為 OGNL 取值,<s:property/> <s:iterator/> struts 標(biāo)簽庫輸出和遍歷便簽。

   上述例子的舉基本為簡(jiǎn)單常規(guī)的樣例,但實(shí)際業(yè)務(wù)邏輯總是伴隨著變化和復(fù)雜規(guī)則,OGNl 基本都能滿足你的要求。

  

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

sa og
AI