a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > JSP > 正文

JSP和JSF合并 打造完美Web層應(yīng)用

2024-09-05 00:20:41
字體:
供稿:網(wǎng)友
  • 本文來源于網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  •   java在最近幾年逐漸升溫,隨著java se 5和java se 6的推出,java的未來更顯得無比輝煌。但以java為基礎(chǔ)的jsp在java se 5推出之前卻一直抬不起頭來,這最重要的原因就是jsp雖然功能十分強(qiáng)大,但最大的優(yōu)點(diǎn)也是它的最大缺點(diǎn),功能強(qiáng)大就意味著復(fù)雜,尤其是設(shè)計(jì)前端界面的可視化工具不多,也不夠強(qiáng)大。因此,設(shè)計(jì)jsp頁面就變得十分復(fù)雜和繁瑣...

      java在最近幾年逐漸升溫,隨著java se 5和java se 6的推出,java的未來更顯得無比輝煌。但以java為基礎(chǔ)的jsp在java se 5推出之前卻一直抬不起頭來,這最重要的原因就是jsp雖然功能十分強(qiáng)大,但最大的優(yōu)點(diǎn)也是它的最大缺點(diǎn),功能強(qiáng)大就意味著復(fù)雜,尤其是設(shè)計(jì)前端界面的可視化工具不多,也不夠強(qiáng)大。因此,設(shè)計(jì)jsp頁面就變得十分復(fù)雜和繁瑣。不過,在java se 5推出的同時(shí),sun為了簡化jsp的開發(fā)難度,推出了新的javaserver faces(簡稱jsf)規(guī)范。從而使jsp走上了康莊大道。

      一、什么是jsf

      jsf和jsp是一對(duì)新的搭檔。jsp是用于后臺(tái)的邏輯處理的技術(shù),而jsf恰恰相反,是使開發(fā)人員能夠快速的開發(fā)基于 java 的 web 應(yīng)用程序的技術(shù),是一種表現(xiàn)層技術(shù)。目前,jsf1.2已經(jīng)正式作為一個(gè)標(biāo)準(zhǔn)加入了java ee 5中。

      作為一種高度組件化的技術(shù),開發(fā)人員可以在一些開發(fā)工具的支持下,實(shí)現(xiàn)拖拉式編輯操作,用戶只需要簡單的將 jsf 組件拖到頁面上,就可以很容易的進(jìn)行 web 開發(fā)了。這是其作為一種組件化的技術(shù)所具有的最大好處,我們能用的組件不光是一些比較簡單的輸入框之類,還有更多復(fù)雜的組件可以使用的,比如 datatable 這樣的表格組件, tree 這樣的樹形組件等等。

      作為一種標(biāo)準(zhǔn)的技術(shù),jsf還得到了相當(dāng)多工具提供商的支持。同時(shí)我們也會(huì)有很多很好的免費(fèi)開發(fā)工具可以使用,前不久 sun java studio creator 2 和 oracle jdeveloper 10g 作為免費(fèi)的支持 jsf 的開發(fā)工具發(fā)布,給 jsf 帶來了不小的生氣。另外我們也有一些很優(yōu)秀的商業(yè)開發(fā)工具可共選擇,bea workshop (原 m7 nitrox),exadel,myeclipse 這樣的基于 eclipse 的插件開發(fā)工具,為現(xiàn)在廣大的 eclipse 用戶帶來了不小的便利,ibm 的 rational application developer 和 borland 的 jbuilder 也是很不錯(cuò)的支持 jsf 可視化開發(fā)的商業(yè)開發(fā)工具。

    |||

      jsf和傳統(tǒng)的web技術(shù)有著本質(zhì)上的差別,在傳統(tǒng)的web技術(shù)需要用戶自己對(duì)瀏覽器請(qǐng)求進(jìn)行捕捉,保存客戶端狀態(tài),并且手工控制著頁面的轉(zhuǎn)向,等等。而jsf的出現(xiàn),無疑給我們帶來了巨大的便利,jsf 提供了事件驅(qū)動(dòng)的頁面導(dǎo)航模型,該模型使應(yīng)用程序開發(fā)人員能夠設(shè)計(jì)應(yīng)用程序的頁面流。與 struts 的方式向類似的是,所有的頁面流信息都定義在 jsf 配置 xml 文件 (faces-config.xml) 中,而非硬編碼在應(yīng)用程序中。這很大程度簡化了開發(fā)人員開發(fā)難度,簡化了應(yīng)用程序的開發(fā)。

      同時(shí)jsf也是一種遵循模型-視圖-控制器 (mvc) 模式的框架。實(shí)現(xiàn)了視圖代碼(view)與應(yīng)用邏輯(model)的完全分離,使得使用 jsf 技術(shù)的應(yīng)用程序能夠很好的實(shí)現(xiàn)頁面與代碼的分離。所有對(duì) jsf 頁面的請(qǐng)求都會(huì)通過一個(gè)前端控制器 (facesservlet) 處理,系統(tǒng)自動(dòng)處理用戶的請(qǐng)求,并將結(jié)果返回給用戶。這和傳統(tǒng)的 mvc 框架并沒有太大的區(qū)別。

      在jsf中不僅使用了 pojo 技術(shù),而且還使用了類似 spring 的控制反轉(zhuǎn)(ioc) (或稱為依賴注入-di) 技術(shù),在 jsf 的 backing bean 中,我們可以把視圖所需要的數(shù)據(jù)和操作放進(jìn)一個(gè) backing bean 中。同時(shí)得益于 jsf 使用的 di 技術(shù),我們可以在配置文件中初始化 managed bean,同時(shí)我們也可以通過這樣的技術(shù)很方便的和使用類似技術(shù)的 spring 進(jìn)行整合。

      二、如何在jsp中使用jsf

      jsf只有通過和jsp相結(jié)合,才能充分發(fā)揮它的功效。jsf是通過標(biāo)簽庫和jsp進(jìn)行集成的。標(biāo)簽庫就相當(dāng)于asp.net的服務(wù)端組件。jsf提供了非常豐富的標(biāo)簽庫,通過這些標(biāo)簽庫,可以生成各種客戶端模型,如html、wml、xml以及javascript等。通過這些標(biāo)簽,你可以很容易建立大規(guī)模的客戶端模型,并由這些標(biāo)簽自動(dòng)處理客戶端請(qǐng)求。

    |||

      接下來讓我們來看一個(gè)如何使jsf和jsp在一起工作的例子。在jsf中有兩個(gè)庫。第一個(gè)叫做內(nèi)核庫,在這個(gè)庫中包含了各種主要的標(biāo)簽,如配置組件、管理事件、驗(yàn)證輸入信息等。第二個(gè)庫的主要功能是將html和jsf的各種標(biāo)簽相對(duì)應(yīng)。每一個(gè)jsf標(biāo)簽都會(huì)對(duì)應(yīng)一個(gè)html組件。如uiinput標(biāo)簽對(duì)應(yīng)了html中的文本框或密碼框。

      在jsf標(biāo)簽中文本輸入框叫做inputtext,而密碼輸入庫叫inputsecret。下面是一個(gè)簡單的jsf和jsp結(jié)合的用戶接口程序。

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=gb2312">
    <title>第一個(gè)jsf程序</title>
    </head>
    <body>
     <f:view>
    ?。糷:form id="simpleform">
     <h:outputtext id="favoritelabel" value="請(qǐng)輸入一個(gè)數(shù)字:"/>
     <h:inputtext id="favoritevalue" value="#{simple.longvalue}">
    <f:validatelongrange maximum="30" minimum="0"/>
    ?。?h:inputtext>
    ?。紁/>
    ?。糷:commandbutton id="submit" value="提交" action="#{simple.simpleactionmethod}"/>
    ?。?h:form>
    ?。?f:view>
    </body>
    </html>

      在上面的代碼中,我們可以了解到j(luò)sf是如何同jsp集成的。我們首先可以看到一個(gè)內(nèi)核標(biāo)簽:view。然后是幾個(gè)jsf組件。如form、outputtext、inputtext以及commandbutton。這幾個(gè)組件被放到form中從而開成了form中的一部分。在程序的最開始,必須使用import導(dǎo)入兩個(gè)標(biāo)簽庫。代碼如下。

    |||,歡迎訪問網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)。<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

      上面2行代碼聲明了jsp中要使用哪一個(gè)jsf標(biāo)簽庫。內(nèi)核庫使用前綴(prefix)f聲明,而html庫使用前綴(prefix)h聲明。這兩個(gè)前綴并不是必須要使用,而只是一個(gè)建議。在程序中,內(nèi)核庫必須要使用,因?yàn)関iew在所有的jsf頁中必須使用。而html標(biāo)簽在運(yùn)行時(shí)將jsf標(biāo)簽轉(zhuǎn)化為html組件,這個(gè)h前綴并不是必須的,而是jsf規(guī)范推薦使用的,這樣,我們使我們的jsf程序更易讀。

      在聲明后是幾行標(biāo)準(zhǔn)的html語句,本文不再詳述。從 f:view 開始,是一段jsf語句。這段代碼如下所示:

    <f:view>
    <h:form id="simpleform">
    <h:outputtext id="favoritelabel" value="請(qǐng)輸入一個(gè)數(shù)字:"/>
    <h:inputtext id="favoritevalue" value="#{simple.longvalue}">
    <f:validatelongrange maximum="30" minimum="0"/>
    </h:inputtext>
    <p/>
    <h:commandbutton id="submit" value="提交"
    action="#{simple.simpleactionmethod}"/>
    </h:form>
    </f:view>

      /f:view 標(biāo)簽預(yù)示著jsf的開始,而它的下一個(gè)標(biāo)簽form將建立一個(gè)html form。而outputtext標(biāo)簽相當(dāng)于html中的label組件。inputtext標(biāo)簽相當(dāng)于html中的textfield組件。而commandbutton標(biāo)簽相當(dāng)于html中的submit按鈕。

      三、jsp如何響應(yīng)jsf的請(qǐng)求

      從上面的例子我們已經(jīng)知道如何在jsp中使用jsf了,在這一部分讓我們來看看在jsf是如何處理請(qǐng)求的。

    |||
    |||

      在程序的前兩行是導(dǎo)入jsf核心庫和html庫,這個(gè)在前面已經(jīng)討論過,在這里不再詳述。

      下面讓我們來看看jsf標(biāo)簽是如何同后端進(jìn)行交互的。由于我們是在jsp中使用jsf,因此,這個(gè)和正常的jsp沒有什么區(qū)別;jsp實(shí)際上就是servlet,在jsp第一次運(yùn)行時(shí)由jsp編譯器將.jsp文件編譯成servlet后再由servlet調(diào)用,然后由servlet來接收客戶端傳過來的數(shù)據(jù)流。但和一般的jsp程序不同的是,jsf標(biāo)簽是由jsf api負(fù)責(zé)調(diào)用的(這樣可以做到邏輯層和表現(xiàn)層分離),除此之外,它們和一般的jsp標(biāo)簽沒有任何區(qū)別。

      當(dāng)uicomponent標(biāo)簽收到dostarttag方法時(shí),jsf將使用這些屬性來設(shè)置標(biāo)簽的值。如本例中的inputtext標(biāo)簽將按它的屬性值來設(shè)置。下面是jsf的代碼片段。

    <h:inputtext id="temperature" value="#{tc.fahrenheittemp}">
     <f:validatedoublerange minimum="-100.0" maximum="100.0"/>
    ?。糵:valuechangelistener type="tempconv.page.tcchangedlistener"/>
    </h:inputtext>

      inputtext標(biāo)簽根據(jù)相應(yīng)的值設(shè)置了id和value的屬性。在jsf中是通過setattribute(string name, object value)設(shè)置每一個(gè)屬性值的。但我們需要注意的是jsf標(biāo)簽可以指定相應(yīng)的默認(rèn)值。這有些類似java中的系統(tǒng)屬性,如果你給了一個(gè)屬性名子,那系統(tǒng)將返回這個(gè)屬性的值,如果指定它的默認(rèn)值,并且這個(gè)屬性不存在的話,將返回這個(gè)默認(rèn)值。

      接下來讓我們來看看上面程序的最重要的部分,也就是uiinput組件的事件處理。

    <f:valuechangelistener type="tempconv.page.tcchangedlistener"/>

      在jsf中事件處理是由valuechangelistener標(biāo)簽完成的。這個(gè)標(biāo)簽所表示的事件在文本框的值發(fā)生變化時(shí)引發(fā)事件。但有意思的是這個(gè)事件并不馬上提交,而是要等到用戶點(diǎn)擊"提交"按鈕后這個(gè)事件連同相應(yīng)的數(shù)據(jù)才提交給后端。因此,這個(gè)事件請(qǐng)求也叫做預(yù)提交。最后,讓我們看看uicommand的代碼實(shí)現(xiàn)。

    <div>
     <h:commandbutton value="轉(zhuǎn)換" action="#{tc.convert}">
    ?。?h:commandbutton>
    </div>

      上面的代碼將convert()方法和uicommand連接了起來,也就是說,點(diǎn)擊"提交"按鈕后,將執(zhí)行convert()方法。在遇到view標(biāo)簽后,jsf程序結(jié)果,jsfapi最后調(diào)用doend方法來結(jié)束jsf程序。jsf引擎在解析這段程序后,將相應(yīng)的jsf標(biāo)簽轉(zhuǎn)換為html組件。

      最后,讓我們來看看jsp是如何響應(yīng)jsf事件的。下面是一段響應(yīng)jsf事件的java代碼。

    publicclasstcchangedlistenerimplementsvaluechangelistener
    {
    publictcchangedlistener()
    {
    super();
    }
    //事件處理
    publicvoidprocessvaluechange(valuechangeeventevent)
    throwsabortprocessingexception
    {
    uicomponentcomp=event.getcomponent();
    objectvalue=event.getnewvalue();
    if(null!=value)
    {
    floatcurval=((number)value).floatvalue();
    mapvalues=comp.getattributes();
    if(curval<0)
    {
    values.put("styleclass","red");
    }
    else
    {
    values.put("styleclass","black");
    }
    }
    }

      要想響應(yīng)jsf事件,必須要實(shí)現(xiàn)jsf庫中的valuechangelistener接口。上面的程序要注意的是最后根據(jù)輸入的值來設(shè)置相應(yīng)的顏色。這些值并不依賴jsp。當(dāng)然,你也可以將它們?cè)O(shè)置成null,而由jsp 標(biāo)簽來設(shè)置它們的顏色.

    發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 天天澡天天狠天天天做 | 不卡的av在线播放 | 亚洲a级 | 草比网站 | 久久另类| 91视频爱爱 | 亚洲美女在线视频 | 中文字幕亚洲欧美精品一区四区 | 日韩国产精品一区二区三区 | 中文字幕在线第一页 | 国产区视频 | 夜夜夜久久久 | 日韩av成人| 日韩视频在线观看不卡 | 青青草视频网站 | 欧美大片网站 | 久久久蜜桃 | 超碰在线人| 欧美视频免费在线观看 | 成人黄色免费 | 欧洲精品久久久 | 欧美国产精品一区二区三区 | 三级黄网站 | 性培育学校羞耻椅子调教h 另类中文字幕 | 亚洲第一视频 | 国产精品一区一区 | 日本在线天堂 | 国产免费黄网站 | 91不卡 | 网址你懂的 | 国产精品久久久久高潮色老头 | 日韩精品无码一区二区三区 | 日本一区二区三区四区视频 | 特级淫片裸体免费看 | 一区二区视频 | 中文字幕a视频 | 国产视频第一页 | 欧美精品在欧美一区二区少妇 | 久久无码精品一区二区三区 | 国产三级在线 | 欧美精品一区在线发布 |