本文轉自與博客園一杯涼茶的博客.
在之前我們學過在JSP頁面上為了不使用腳本,所以我們有了JSP內置的行為、行為只能提供一小部分的功能,大多數的時候還是會用java腳本,接著就使用了EL表達式,基本上EL表達式看似能滿足我們的要求,它能夠獲取各種對象,各種值,并且還不會拋出NullPointerException之類的錯誤,但是EL表達式功能還是有限,例如不能遍歷集合等,因此為了完善JSP,讓其完全不使用java代碼,就有了jstl標簽庫,使用jstl和EL的配合使用,基本上可以實現所有的功能,顯示數據,遍歷數據等。
一、為什么使用標簽?
JSP是用來顯示數據的,前面我們在JSP中的HTML中嵌入java代碼,與等混在一起,可讀性和可維護性都很差,而且使用java腳本不便于代碼重用,要實現比較復雜的顯示功能,也不方便,而JSP標簽和HTML代碼很類似,使用JSP標簽顯得JSP整潔而干凈,可讀性好,標簽能夠重復使用,所以就像我們上面說的,我們慢慢意識到不足,就自然在一步步改進,從使用JSP行為,使用EL,在使用標簽,都是為了一個目的,讓JSP更加完全,方便,只顯示數據,而不嵌入邏輯代碼。這個涉及到了分層思想,后面說講解到。
二、JSTL標簽庫
JSTL標簽庫中包括很多種類的標簽core、fmt、fn方法庫、sql標簽庫,使用JSTL標簽庫,需要用taglib指令導入JSTL標簽庫
core標簽庫
講解、、、、、、 、、 、、
標簽
out :將指定內容輸出到瀏覽器,默認支持el表達式,
value:輸出的值,可以為EL表達式
default:如果value屬性的值不存在,會輸出default屬性值
excapeXml:如果為true,則會為value中的特殊字符進行轉義,默認為true


和標簽

圖中只介紹set標簽的一種用法,其中var不能接受EL表達式,只能是字符,
target:跟var類似,但是它能夠接受EL表達式,可以是一個對象,一個map等,和var進行互補
property:對象中的屬性名
value:屬性賦值

使用哪種set標簽,就看自己的需求了。
標簽
if條件語句

標簽

標簽
將自定義字符串,按照指定字符進行分割,并遍歷輸出
items:自定義字符串
delims:指定字符
var:遍歷的變量名。

標簽
相當于try catch


var:捕捉后的異常對象
標簽
增強的for循環,
格式:
items:需要遍歷的對象
var:用于存放遍歷的每一項內容,存放在page作用域,只能在循環體中使用
1、items為字符串或字符串數組
為字符串,直接輸出,為字符串數組,遍歷輸出


2、items為list集合

3、items為map集合

4、普通for循環

begin:從1開始
end:到10結束
step:每次加2
var:循環的變量,
標簽
記得講session的時候,如果cookie禁用了,那么只能將url進行重寫才能讓session繼續生效,而使用的api是response.encodeURL();就是將SESSIONID當作參數帶過來,而url標簽的作用就是實現類似功能
就講解三個屬性
value:要進行重寫的url
var:如果寫了該變量,那么就會將其重寫后的url存入page作用域中,如果scope沒有的話,默認就是page,否則以scope屬性值為準,在作用域范圍內就可以直接拿著這個變量使用了,如下面所展示的。
scope:作用域范圍,默認是page,

訪問后點擊超鏈接
沒有關閉cookie,所以不會將SESSIONID寫入url中 。

標簽

標簽
類似于JSP的include行為和include指令,JSTL也提供了include功能的標簽,不過import標簽功能更強大,甚至可以把Internet上的網頁包含進來。


fmt標簽庫
是一些輔助性功能標簽,就講解一個把,用的不多,等用到的時候在去詳細學
標簽只有一個屬性,value
設置編碼,
相當于Java中的request.setCharacterEncoding("");
post提交中文參數,使用來設置編碼,就不會出現中文亂碼了。
get提交中文參數,該標簽就會失效,除非到TOMCAT的server.xml中,將URLEncoding設置為UTF-8(默認為ISO-8859-1)。
顯示所有地區的數據格式等等
fn方法庫
提供一些方法,函數,例如字符串查找,截取之類。之所以不叫fn標簽庫而叫fn方法庫,因為與core,fmt標簽格式不一樣,并且必須在el表達式中使用
格式:fn:methodName()的格式,比如,fn:contains()
contains方法判斷是否包含指定的字符串,相當于java里String類的contains方法。
fn:contains(String string1,String string2);
containsIgnoreCase方法,判斷是否包含指定字符串,忽略大小寫
fn:contains(String string1,String string2)
endsWith方法,判斷某字符串是否以指定的參數結尾,
fn:endWith(String string1,String string2);
startsWith方法,判斷某字符串是否以指定參數開始
fn:startsWith(String string1,String string2);
escapeXml方法,是否轉義字符
fn:escapeXml(source);
indexOf方法,查找字符串在另一個字符串中第一次出現的位置
fn:indexOf(String string1,String string2);
split方法,將字符串以指定參數為界分割成多個字符串形成字符串數組
。。
join方法,與split方法相反,將字符串數組以參數為界連接成字符串
length方法,取字符串,數組,集合的長度等等
SQL標簽庫
JSP中直接可以操作數據庫,但是大多數時候我們都不會這樣用。。
XML標簽庫
為了方便地處理XML,
三、總結
重點講解了一下JSTL中的core標簽庫,其實也就是一些控制流程的標簽,沒什么思想,只要會用就行了,以后忘記了就回過頭來查查看,最重要的是思想,這些死東西記錄一下就行了。