成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JSP第五篇【JSTL的介紹、core標(biāo)簽庫、fn方法庫、fmt標(biāo)簽庫】

solocoder / 1965人閱讀

摘要:標(biāo)簽在為一個(gè)地址附加參數(shù)時(shí),將自動(dòng)對(duì)參數(shù)值進(jìn)行編碼,例如,如果傳遞的參數(shù)值為中國(guó),則將其轉(zhuǎn)換為后再附加到地址后面,這也就是使用標(biāo)簽的最大好處。

什么是JSTL

JSTL全稱為 JSP Standard Tag Library 即JSP標(biāo)準(zhǔn)標(biāo)簽庫。

JSTL作為最基本的標(biāo)簽庫,提供了一系列的JSP標(biāo)簽,實(shí)現(xiàn)了基本的功能:集合的遍歷、數(shù)據(jù)的輸出、字符串的處理、數(shù)據(jù)的格式化等等!

為什么要使用JSTL

EL表達(dá)式不夠完美,需要JSTL的支持!在JSP中,我們前面已經(jīng)用到了EL表達(dá)式,體會(huì)到了EL表達(dá)式的強(qiáng)大功能:使用EL表達(dá)式可以很方便地引用一些JavaBean以及其屬性,不會(huì)拋出NullPointerException之類的錯(cuò)誤!但是,EL表達(dá)式非常有限,它不能遍歷集合,做邏輯的控制。這時(shí),就需要JSTL的支持了!

Scriptlet的可讀性,維護(hù)性,重用性都十分差!JSTL與HTML代碼十分類似,遵循著XML標(biāo)簽語法,使用JSTL讓JSP頁面顯得整潔,可讀性非常好,重用性非常高,可以完成復(fù)雜的功能!

在JSP中不推薦使用scriptlet輸出,推薦使用JSP標(biāo)簽。

使用JSTL標(biāo)簽庫步驟:

導(dǎo)入jstl.jar和standard.jar開發(fā)包

在JSP頁面中用tablib指令引入需要用到的JSTL標(biāo)簽

core標(biāo)簽庫

core標(biāo)簽庫是JSTL的核心標(biāo)簽庫,實(shí)現(xiàn)了最基本的功能:流程控制、迭代輸出等操作!

core標(biāo)簽庫的前綴一般是c

c:out

簡(jiǎn)單使用一下

    <%
        session.setAttribute("name", "zhongfucheng");
    %>
    
    //標(biāo)簽支持標(biāo)簽體,default屬性上的數(shù)據(jù)可以寫在標(biāo)簽體中
    //您要的數(shù)據(jù)找不著

    

    

我們發(fā)現(xiàn)上面的代碼實(shí)現(xiàn)的效果和EL表達(dá)式是一樣的,它出色的地方就多了兩個(gè)屬性,default和escapeXml屬性。如果我們用到這兩個(gè)屬性,我們就使用該標(biāo)簽,如果沒有用到這兩個(gè)屬性就用EL表達(dá)式就可以了。

c:set

該標(biāo)簽有5個(gè)屬性,用起來有稍微有些復(fù)雜了!現(xiàn)在要記住的就是:var屬性操作的是Integer、Double、Float、String等類型的數(shù)據(jù),target屬性操作的是JavaBean或Map對(duì)象的數(shù)據(jù),scope代表的是Web域,value是值,property是對(duì)象的屬性!

使用var屬性

既然var屬性只能操作Integer、Double、String等類型,那么存在var屬性就一定沒有property屬性(property代表的是對(duì)象的成員屬性,Integer、String這些類型哪來的成員變量呀)

下面的代碼流程是這樣的:創(chuàng)建了一個(gè)name的變量,設(shè)置的值為zhongfucheng,范圍是page

    
    
    ${name}

效果:

當(dāng)然了,set標(biāo)簽也支持標(biāo)簽體,value的值可以寫在標(biāo)簽體里邊

    
        zhongfucheng
    

使用var屬性和scope屬性實(shí)現(xiàn)計(jì)數(shù)器


    <%--由于下面變量需要做加法運(yùn)算,所以要定義出來,不然服務(wù)器是不知道我的變量是Integer類型的--%>
    <%
        Integer sessionCount = 0;
        Integer applicationCount = 0;
    %>
    
    
    

效果:

使用target屬性

使用target屬性與之配對(duì)的是property屬性,target屬性只能操作JavaBean或Map對(duì)象,property就是對(duì)應(yīng)的成員變量或key了。。

既然target屬性操作的是JavaBean或Map對(duì)象,那么一定是通過EL表達(dá)式來獲取到對(duì)象了。taget屬性如果獲取不到數(shù)據(jù)會(huì)拋出異常!使用target屬性就一定沒有scope屬性(scope屬性代表的是保存范圍,target的值都是獲取來的,難道你還能改變?nèi)思业姆秶???/strong>

    <%--創(chuàng)建出JavaBean對(duì)象,設(shè)置為session范圍的屬性--%>
    
    
    <%--獲取到person對(duì)象,設(shè)置age屬性的值為32--%>
    
    
    ${person.age}

效果:

c:remove

remove標(biāo)簽就相當(dāng)簡(jiǎn)單了,只有var和scope屬性,代表的是刪除域范圍的屬性

下面簡(jiǎn)單來測(cè)試一下吧:

    <%--創(chuàng)建出JavaBean對(duì)象,設(shè)置為session范圍的屬性--%>
    
    
    <%--獲取到person對(duì)象,設(shè)置age屬性的值為32--%>
    
    
    ${person.age}
    
<%--刪除session屬性--%> ${person.age==null?"存在session的person對(duì)象被刪除了!":"我還在呢!"}

效果:

c:catch

該標(biāo)簽主要用來處理程序中產(chǎn)生的異常。

catch標(biāo)簽也十分簡(jiǎn)單,只有一個(gè)var屬性,var屬性封裝了異常的信息!

    <%--創(chuàng)建出JavaBean對(duì)象,設(shè)置為session范圍的屬性--%>
    
    
    
    
        <%--target屬性只能是EL表達(dá)式,現(xiàn)在我是字符串,獲取不到對(duì)象,肯定會(huì)拋出異常的!--%>
        
    
    
    
    ${message}

效果:

c:if

JSTL提供了if標(biāo)簽完成分支語句的實(shí)現(xiàn),test屬性是不可或缺的

var和scope屬性我看來好像沒什么用的(保存執(zhí)行結(jié)果有什么用?)

根據(jù)傳遞過來的參數(shù)的不同顯示不同的頁面!

    <%--如果帶過來的名字是zhongfucheng,那么可以登陸--%>
    
        用戶名:
密碼:
<%--如果帶過來的名字是ouzicheng,那么就是注冊(cè)--%> 用戶名:
密碼:

注意地址欄的參數(shù)!

c:choose

if標(biāo)簽沒有else的功能,如果需要類似于java中的if else流程就需要使用choose標(biāo)簽。

choose標(biāo)簽需要聯(lián)合when和otherwise標(biāo)簽一起使用!

    
        
            你好啊,zhongfucheng
        
        
            你好啊,ouzicheng
        
        
            你是誰???別隨便過來!
        
    

效果:

c:forEach

forEach為循環(huán)標(biāo)簽,相當(dāng)于Java中的while和for

之前我們?cè)谑褂肊L表達(dá)式獲取到集合的數(shù)據(jù),遍歷集合都是用scriptlet代碼循環(huán),現(xiàn)在我們學(xué)了forEach標(biāo)簽就可以舍棄scriptlet代碼了。

向Session中設(shè)置屬性,屬性的類型是List集合

    <%
        List list = new ArrayList<>();
        list.add("zhongfucheng");
        list.add("ouzicheng");
        list.add("xiaoming");
    
        session.setAttribute("list", list);
    %>

遍歷session屬性中的List集合,items:即將要迭代的集合。var:當(dāng)前迭代到的元素

    
        ${list}

效果:

遍歷Map對(duì)象有稍微地不一樣,我們來看一下,var屬性保存的不是每個(gè)迭代的對(duì)象,而是Map.Entry。


    <%
        Map map = new HashMap();
        map.put("1", "zhongfucheng");
        map.put("2", "xiaohong");
        map.put("3", "xiaoming");
    
        session.setAttribute("map",map);
    %>
    
    
    
        ${me.key}  ${me.value}

begin默認(rèn)從0開始、end默認(rèn)為集合的最后一個(gè)元素、step默認(rèn)為1

varStatus代表著當(dāng)前對(duì)象被迭代的信息,它有以下的屬性。

index【返回當(dāng)前是第幾個(gè)對(duì)象,從0開始計(jì)數(shù)】

count【已經(jīng)遍歷多少個(gè)對(duì)象了,從1開始計(jì)數(shù)】

first【是否是第一個(gè)】

last【是否是最后一個(gè)】

current【當(dāng)前被迭代的對(duì)象】

begin【開始的位置】

end【最后的位置】

step【步長(zhǎng)】

    
    
        ${list}您的下標(biāo)是:${varStatus.index}

效果:

c:forTokens

該標(biāo)簽類似于String類的split()和for循環(huán)的一種集合

它與forEach標(biāo)簽非常相似,都有begin、end、step、items、var、varStatus屬性,不同的是forTokens標(biāo)簽的items屬性里面是字符串,這個(gè)字符串會(huì)被delims屬性的內(nèi)容分割成多個(gè)字符串!

    
        ${name}
    

效果圖:

c:import

import標(biāo)簽類似于JSP行為和JSP指令<%include>

import標(biāo)簽的屬性:

url【指定要包含的路徑,Internet所有的url都可以】

context【訪問同一個(gè)web容器的其他資源,以"/"開頭】

var【保存導(dǎo)入的文件的內(nèi)容,以String類型存儲(chǔ)】

socpe【保存的范圍,默認(rèn)是page】

charEncoding【字符編碼】

varReader【保存導(dǎo)入文件的內(nèi)容,以Reader類型存儲(chǔ)】

當(dāng)然了,import標(biāo)簽功能更加更大!強(qiáng)大在哪里呢?import標(biāo)簽可以引入Internet網(wǎng)頁上的內(nèi)容,也就是說,csdn也可以引入進(jìn)來!

我們來用一下把!

    

我們一看,是沒有樣式的

打印csdn的源代碼

    
    
    CSDN的源碼是:




效果:

c:param

在JSP頁面進(jìn)行URL的相關(guān)操作時(shí),經(jīng)常要在URL地址后面附加一些參數(shù)。標(biāo)簽可以嵌套在、標(biāo)簽內(nèi),為這些標(biāo)簽所使用的URL地址附加參數(shù)。

標(biāo)簽在為一個(gè)URL地址附加參數(shù)時(shí),將自動(dòng)對(duì)參數(shù)值進(jìn)行URL編碼,例如,如果傳遞的參數(shù)值為“中國(guó)”,則將其轉(zhuǎn)換為“%d6%d0%b9%fa”后再附加到URL地址后面,這也就是使用標(biāo)簽的最大好處。

c:url

url標(biāo)簽十分實(shí)用!在瀏覽器禁用Cookie的時(shí)候,我們之前學(xué)Servlet時(shí)解決辦法是:response.encodeURL()。url標(biāo)簽也可以實(shí)現(xiàn)這樣的功能,再配合param標(biāo)簽使用,就十分實(shí)用了!

我們配合param標(biāo)簽來使用一下吧!

    
        
        
    
    
    我經(jīng)過了URL地址重寫!

效果:

c:redirect

redirect標(biāo)簽用于實(shí)現(xiàn)Redirect功能,當(dāng)然了,此標(biāo)簽也能夠配合param標(biāo)簽使用!

簡(jiǎn)單使用一下,重定向到2.jsp,帶了一個(gè)參數(shù)

    
        
        
    

在2.jsp中獲取到參數(shù)

fmt標(biāo)簽庫

fmt標(biāo)簽庫也叫做國(guó)際化標(biāo)簽庫。這里就不詳細(xì)說明了,等我講到Web 國(guó)際化的時(shí)候才講吧!

fn方法庫

fn方法庫也叫做EL函數(shù)庫、fn標(biāo)簽庫。這個(gè)在講解EL表達(dá)式的時(shí)候有詳細(xì)的說明,可轉(zhuǎn)移到我EL表達(dá)式的博文中!

如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章的同學(xué),可以關(guān)注微信公眾號(hào):Java3y

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68458.html

相關(guān)文章

  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點(diǎn)多了,為了自己和大家的檢索方便,于是我就做了這么一個(gè)博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時(shí)間才會(huì)更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號(hào):Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡(jiǎn)單 注解就這么簡(jiǎn)單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評(píng)論0 收藏0
  • JavaWEB開發(fā)11——JSP

    摘要:出現(xiàn)的目的同一樣也是要提到頁面中的腳本代碼。標(biāo)準(zhǔn)標(biāo)準(zhǔn)標(biāo)簽庫有個(gè)子庫,但隨著發(fā)展,目前常使用的是他的核心庫標(biāo)簽庫標(biāo)簽庫的前綴下載與導(dǎo)入下載從的網(wǎng)站下載的包。 一、JSP技術(shù)1.jsp腳本和注釋jsp腳本:1) ----- 內(nèi)部的java代碼翻譯到service方法的內(nèi)部2) ----- 會(huì)被翻譯成service方法內(nèi)部out.print()3) ---- 會(huì)被翻譯成servlet的成員的...

    beita 評(píng)論0 收藏0
  • JSTL

    摘要:關(guān)于對(duì)本次學(xué)習(xí)的進(jìn)行總結(jié)下載在中,直接搜索,,找到下載量最高的,下載版本。設(shè)置循環(huán)變量到幾結(jié)束。設(shè)置步長(zhǎng)等同與中的,或。格式化數(shù)字保留小數(shù)點(diǎn)后位,它會(huì)四舍五入如果不足位,以補(bǔ)位保留小數(shù)點(diǎn)后位,它會(huì)四舍五入如果不足位,不補(bǔ)位 關(guān)于對(duì)本次學(xué)習(xí)的JSTL進(jìn)行總結(jié) 下載 在mvnrepository中,直接搜索jstl,,找到下載量最高的,下載1.2版本。 showImg(https://s...

    wangxinarhat 評(píng)論0 收藏0
  • JSP第四篇【EL表達(dá)式介紹、獲取各類數(shù)據(jù)、11個(gè)內(nèi)置對(duì)象、執(zhí)行運(yùn)算、回顯數(shù)據(jù)、自定義函數(shù)、fn方法

    什么是EL表達(dá)式? 表達(dá)式語言(Expression Language,EL),EL表達(dá)式是用${}括起來的腳本,用來更方便的讀取對(duì)象! EL表達(dá)式主要用來讀取數(shù)據(jù),進(jìn)行內(nèi)容的顯示! 為什么要使用EL表達(dá)式? 為什么要使用EL表達(dá)式,我們先來看一下沒有EL表達(dá)式是怎么樣讀取對(duì)象數(shù)據(jù)的吧! 在1.jsp中設(shè)置了Session屬性 向session設(shè)置一個(gè)屬性 在2...

    flyer_dev 評(píng)論0 收藏0
  • JSP第六篇【自定義標(biāo)簽之傳統(tǒng)標(biāo)簽

    摘要:首先我們來看一下接口的源碼上面程序的執(zhí)行流程引擎遇到自定義標(biāo)簽,首先創(chuàng)建標(biāo)簽處理器類的實(shí)例對(duì)象。當(dāng)容器執(zhí)行到自定義標(biāo)簽的結(jié)束標(biāo)記時(shí),調(diào)用方法。 為什么要使用自定義標(biāo)簽? JSTL標(biāo)簽庫只提供了簡(jiǎn)單的輸出等功能,沒有實(shí)現(xiàn)任何的HTML代碼封裝,并且某些復(fù)雜類型轉(zhuǎn)換,或者邏輯處理的時(shí)候,JSTL標(biāo)簽庫完成不了,需要自定義標(biāo)簽! 編寫自定義標(biāo)簽的步驟: 編寫一個(gè)實(shí)現(xiàn)Tag接口的Java類【...

    songze 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<