透過前面幾篇,相信對於如何自定義tag應該沒有什麼問題了。不過在JSTL裡面有個特殊的tag,專門用在EL裡面,因此我們稱之為function tag。
我們自己也可以自定義function tag,這樣在使用EL的時候就不會感覺到力不從心。這一篇我們來看看如何自定義function tag。
[Tag] 自定義方法
- 2534
- 0
- 「iThome 第六屆 鐵人賽」
透過前面幾篇,相信對於如何自定義tag應該沒有什麼問題了。不過在JSTL裡面有個特殊的tag,專門用在EL裡面,因此我們稱之為function tag。
我們自己也可以自定義function tag,這樣在使用EL的時候就不會感覺到力不從心。這一篇我們來看看如何自定義function tag。
之前我們介紹的Tag都是以實作interface Tag來達到效果。而Interface Tag有多個method,並且在不同的時候返回不同的值來控制流程。
但是當我們在實際使用的時候,通常來說我們不會需要控制這些流程,我們只會override doEndTag()而已,就為了這個要實作並且返回奇怪的數字看起來是在很麻煩。
因此在jsp 2.x之後,除了支援舊的格式以外,有多增加了一個interface叫做SimpleTag讓我們開發自定義tag的時候更加容易。
這一篇我們來看一下和interface Tag有什麼不一樣。
上一篇介紹了如何繼承TagSupport來更簡單製作自定義tag,還記得之前我們介紹Tag interface的時候提到過的流程,相信有注意到曾經提過我們能夠設定是否能夠有body的內容。
我們這一篇會介紹如何來處理Tag裡面body的部份。
實作Tag的java都可以成為jsp用的tag。不過每一次都需要自己實作Tag很麻煩,因此TagSupport是一個已經實作Tag的java class,讓我們更容易實作tag。
同時我們介紹如何自定義Attribute。
在上一篇我們看到了基本要實作一個tag的方法,相信在過程當中大家對於doStartTag()和doEndTag()差異感到興趣,同時他們回傳的東西到底代表著什麼。
在這一篇我們會在詳細的看一下自定義標籤的執行流程。
我們目前已經看過了JSTL裡面的3個Tag。其實JSTL裡面還有兩個Tag,一個是用來處理XML的Tag,讓你可以對一個XML做類似於XPath的動作。還有一個是對資料庫做動作的tag。
這兩個Tag我跳過了,首先對DB可以做存取的Tag我覺的不應該是JSP頁面做的事情,而是Servlet做。因此我覺的只要知道有這個Tag就好,我個人會儘量不用。至於XML的tag有用,但是其實他和之前介紹core tag非常像,只是在Select是使用類似於xpath的概念去parse xml。因此,如果有需要在去看就可以。
今天,我希望來介紹一下基本自定義Tag所需要注意到的事情。
今天我們會來看JSTL裡面比較特別的一個方法庫fn。他和之前的JSTL都不太一樣,它主要是作用於EL裡面而不是之前看到的
上一篇看了jstl裡面的基本標籤core,這一篇我們來看jstl另外一個標籤就是fmt全稱為format。
經過上一篇對於Tag標籤的介紹之後,大家對於tag應該有點感覺吧。我們今天就會來介紹JSTL裡面的Core類型的標籤。
到目前來說我們已經介紹了JSP和Servlet的基本使用。相信初學著來說比較喜歡使用JSP來直接製作頁面。因為1對於畫面呈現上面來說,他比較好寫,2因為通常有寫過Web的人,jsp那種模式的寫法每一個Web框架應該都有類似的。所以做起來很方便。
不過對於大型專案來說,只靠jsp來寫web是不行的,因為很多code沒有辦法reuse,造成不好維護。因此現在越來越多框架,例如MVC的概念是希望每一個部份有特定的做處理,讓程式的維護更好做。
接下來要介紹的JSTL是jsp裡面的標準Tag,而這些能夠讓我們的jsp頁面只關注與View的部份,同時因為Tag可以被reuse,讓我們在維護上面更加容易。
寫過Web的人都有這種經驗,有些頁面在顯示內容的時候會希望先做過過濾再決定輸出內容(例如有些頁面只有登入著才能夠看到),或者希望記錄那一頁的點擊率。這些我們都能夠直接刻在Servlet裡面來達到,但是如果你有20個Servlet都需要驗證,難道那20個裡面都寫一樣的驗證邏輯(或者呼叫一樣的驗證邏輯)?
今天我們要來看看Servlet裡面的一個很強大的功能,能夠輕鬆解決這個問題,而它就是Filter。
在JSP頁面裡面有一些隱藏的物件。這些物件是jsp提供給你讓你能夠做到像在Servlet裡面一樣的事情,而我們這篇會個字介紹一下這些隱藏物件的作用和用法。
jsp像Servlet一樣,因此還記得我們在Servlet需要設定對應的route,而jsp預設是可以不用設定在web.xml裡面。可是,如果今天你希望透過設定的方式來設置 jsp頁面,這個也是可以的。
從最早之前介紹了能夠在JSP裡面寫Java的Scriptlet Element,到讓程式碼可以重用的action element。但是這些方法寫起來還是不那麼的方便。作為最懶的一群人,每一次要取得session裡面的東西都要寫落落長的東西不是很煩,所以Expression Language(EL)就誕生了。
今天,我們就要來看看EL給我們帶來的便利。
Action Element的結構都是
從上面看起來,就像是普通的html,只不過有特別的prefix在前面。其實,在上一篇我們提到Directive 的taglib,其實就是這種概念。
因此,Action Element就像名字一樣,都是帶有一個特別目的的Element。最終目的是達到Code Reuse。
Directive是用來設定和這一頁相關的內容,基本構成是<%@{directive} {attribute key}={attribute value} %>。
我覺得大部份Directive從字面上都還滿容易看的懂在做什麼,因此我會記錄一些我覺的比較特別的。
在上一篇對於JSP有簡單概念之後,我們要開始實際使用JSP。要使用JSP,我們就需要對他的頁面構成有更深入的瞭解。
這一篇會介紹JSP的基本框架,然後開始介紹每一個的不同之處。
JSP的全稱是Java Server Page,而它和Servlet一樣,都是HttpServlet(Servlet API)的子類。那他和Servlet差異是什麼呢?其實主要是工作的面向不同
在介紹Servlet的時候,每當我們需要顯示內容回傳給客戶端的時候,我們都透過了out.println()的方法。光要寫一個基本的html頁面就很痛苦了,更別說如果要加上Javascript,或者比較複雜的模板,利用Servlet來做更本就是夢魘。通常我們網站都會有部份是一樣的,例如頁首和頁尾,可以想像的到如何用out.println()把這些都拼起來的畫面嗎?我相信程式設計師應該會崩潰吧。更別說如果要維護和修改。
當初的Sun看到問題,所以才有了JSP的誕生。
JSP的面向是處理View的部份,也就是實際把動態產生的內容呈現給客戶端的處理。這樣的做法是我們能夠把邏輯和顯示層分開,達到更容易維護,並且做到sepreation of concerns。