国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JSP和JSF合并 打造完美Web層應用

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

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

      一、什么是jsf

      jsf和jsp是一對新的搭檔。jsp是用于后臺的邏輯處理的技術,而jsf恰恰相反,是使開發人員能夠快速的開發基于 java 的 web 應用程序的技術,是一種表現層技術。目前,jsf1.2已經正式作為一個標準加入了java ee 5中。

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

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

    |||

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

      同時jsf也是一種遵循模型-視圖-控制器 (mvc) 模式的框架。實現了視圖代碼(view)與應用邏輯(model)的完全分離,使得使用 jsf 技術的應用程序能夠很好的實現頁面與代碼的分離。所有對 jsf 頁面的請求都會通過一個前端控制器 (facesservlet) 處理,系統自動處理用戶的請求,并將結果返回給用戶。這和傳統的 mvc 框架并沒有太大的區別。

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

      二、如何在jsp中使用jsf

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

    |||

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

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

    <%@ 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>第一個jsf程序</title>
    </head>
    <body>
     <f:view>
     <h:form id="simpleform">
     <h:outputtext id="favoritelabel" value="請輸入一個數字:"/>
     <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>
    </body>
    </html>

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

    |||,歡迎訪問網頁設計愛好者web開發。<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

      上面2行代碼聲明了jsp中要使用哪一個jsf標簽庫。內核庫使用前綴(prefix)f聲明,而html庫使用前綴(prefix)h聲明。這兩個前綴并不是必須要使用,而只是一個建議。在程序中,內核庫必須要使用,因為view在所有的jsf頁中必須使用。而html標簽在運行時將jsf標簽轉化為html組件,這個h前綴并不是必須的,而是jsf規范推薦使用的,這樣,我們使我們的jsf程序更易讀。

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

    <f:view>
    <h:form id="simpleform">
    <h:outputtext id="favoritelabel" value="請輸入一個數字:"/>
    <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 標簽預示著jsf的開始,而它的下一個標簽form將建立一個html form。而outputtext標簽相當于html中的label組件。inputtext標簽相當于html中的textfield組件。而commandbutton標簽相當于html中的submit按鈕。

      三、jsp如何響應jsf的請求

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

    |||
    |||

      在程序的前兩行是導入jsf核心庫和html庫,這個在前面已經討論過,在這里不再詳述。

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

      當uicomponent標簽收到dostarttag方法時,jsf將使用這些屬性來設置標簽的值。如本例中的inputtext標簽將按它的屬性值來設置。下面是jsf的代碼片段。

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

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

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

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

      在jsf中事件處理是由valuechangelistener標簽完成的。這個標簽所表示的事件在文本框的值發生變化時引發事件。但有意思的是這個事件并不馬上提交,而是要等到用戶點擊"提交"按鈕后這個事件連同相應的數據才提交給后端。因此,這個事件請求也叫做預提交。最后,讓我們看看uicommand的代碼實現。

    <div>
     <h:commandbutton value="轉換" action="#{tc.convert}">
     </h:commandbutton>
    </div>

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

      最后,讓我們來看看jsp是如何響應jsf事件的。下面是一段響應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");
    }
    }
    }

      要想響應jsf事件,必須要實現jsf庫中的valuechangelistener接口。上面的程序要注意的是最后根據輸入的值來設置相應的顏色。這些值并不依賴jsp。當然,你也可以將它們設置成null,而由jsp 標簽來設置它們的顏色.

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 青龙| 沅江市| 兰溪市| 兴和县| 许昌市| 富阳市| 曲麻莱县| 方山县| 文登市| 桐城市| 商水县| 息烽县| 绿春县| 雷山县| 深圳市| 平舆县| 航空| 仁怀市| 晋中市| 偃师市| 嘉义市| 海阳市| 昂仁县| 宁都县| 渝中区| 岚皋县| 澜沧| 临沭县| 河北省| 壶关县| 建平县| 雅江县| 庆阳市| 正镶白旗| 曲阜市| 牡丹江市| 崇州市| 肇庆市| 厦门市| 乐陵市| 扎赉特旗|