<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 27,  comments - 14,  trackbacks - 0
             關(guān)于Portlet的一些概念性的文字網(wǎng)絡(luò)上很多,谷歌或是百度一下可以很容易搜索到,下面我把自己覺(jué)得容易混淆和模糊的幾個(gè)知識(shí)點(diǎn)做下簡(jiǎn)單介紹:
    1、Portlet Request & URL

          在一個(gè) Portal 頁(yè)面中,通常都包含了多個(gè) Portlet ,在一個(gè)時(shí)刻用戶(hù)只能與一個(gè) Portlet 交互,當(dāng)用戶(hù)向一個(gè) Portlet 發(fā)出請(qǐng)求(例如點(diǎn)擊了“ submit ”按鈕),整個(gè) Portlet 頁(yè)面將會(huì)重新構(gòu)成。在這個(gè)過(guò)程中,是否有與用戶(hù)交互的 Portlet 處理方式顯然是不同的,而且用戶(hù)沒(méi)有與之交互的 Portlet 顯然不應(yīng)該接收到用戶(hù)的請(qǐng)求參數(shù)。
       因此 JSR168 規(guī)范中將對(duì) Portlet 的請(qǐng)求分為 Action 和 Render 兩種。 Portlet 在收到 Action 請(qǐng)求,獲取用戶(hù)所提交的信息,進(jìn)行相應(yīng)的處理;受到 Render 請(qǐng)求后,則生成頁(yè)面代碼。當(dāng)用戶(hù)向一個(gè) Portlet 發(fā)出請(qǐng)求,該請(qǐng)求被 Portlet 容器接受, Portlet 容器再調(diào)用相應(yīng) Portlet 的 processAction() 方法;等到 processAction() 方法執(zhí)行完畢后, Portlet 容器再調(diào)用所有 Portlet 的 render() 方法,并將這些方法所返回的內(nèi)容組合形成一個(gè)頁(yè)面返回給客戶(hù)端。在上述過(guò)程中,所有 Portlet 的 render() 方法的調(diào)用次序在規(guī)范中沒(méi)有規(guī)定,既可能是有順序的串行調(diào)用,也可能是多線(xiàn)程的同步調(diào)用,依賴(lài)于廠(chǎng)商的具體實(shí)現(xiàn)。

           為了接受用戶(hù)請(qǐng)求,一個(gè) Portlet 需要有一個(gè)指向其自身的 URL ,例如用在 HTTP FORM 的 ACTION 字段。但是與 Servlet 不同的是, Portlet 不是一個(gè)完整的頁(yè)面而只是頁(yè)面的一部分,一個(gè) Portlet 可以出現(xiàn)在多個(gè)頁(yè)面中,所以 Portlet 無(wú)法綁定具體的 URL 。在 JSR168 規(guī)范中定義了 PortletURL 接口,通過(guò)該接口可以得到指向 Portlet 自身的 URL ,對(duì)應(yīng)兩種用戶(hù)請(qǐng)求有兩種產(chǎn)生 URL 的方法: q?4k2@*v_rk*l
    一、for render():
    PortletURL url = response.createRenderURL(); www.portalfan.com&S        A(`L v(s
    url.setParameter(“customer”,”foo.com”);
    url.setParameter(“show”,”summary”); !g{f#vk^
    writer.print(“<A HREF=\””+url.toString()+”\”>Summary</A>”);

    4x_kUS/^![
    二、for processAction():
    `kTi3O

    PortletURL url = response.createActionURL();
    url.setParameter(“paymentMethod”,”creditCardInProfile”);
    url.setWindowState(WindowState.MAXIMIZED); www.portalfan.com1x"p VfH
    writer.print(“<FORM METHOD=\”POST\” ACTION=\””+ url.toString()+”\”>”);
    (r/aI iI(v/i
      上面的代碼我們可以看到,除了得到 URL 外,還可以在其中加入?yún)?shù)。另外由于 Portal 服務(wù)器廠(chǎng)商通常都會(huì)利用 URL 增加一些產(chǎn)品相關(guān)的參數(shù),因此強(qiáng)烈建議在 Portlet 中提交用戶(hù)請(qǐng)求采用 POST 方式。

    2、 Portlet Modes & Window States
    在 Portal 應(yīng)用中,用戶(hù)通常需要設(shè)置、調(diào)整 Portlet 的顯示方式,對(duì)此 JSR168 同樣做出了規(guī)定。分別有 Portlet Modes 和 Window States 。
    Portlet Modes 說(shuō)明 Portlet 目前所執(zhí)行的功能模式,規(guī)范要求 Portal 服務(wù)器必須支持以下三種模式: www.portalfan.com\        k6k7cWk
    )e-[_lj rq&sI
    q

    VIEW ——內(nèi)容顯示,通常為缺省模式 
    EDIT ——編輯相關(guān)的設(shè)置
    HELP ——顯示幫助信息
    除此之外可以Portal服務(wù)器可以實(shí)現(xiàn)自定義的模式。portal愛(ài)好者0XLqXP5iv J

    每個(gè) Portlet 在 Portal 頁(yè)面中就是一個(gè)“窗口”,類(lèi)似于 MS Windows 、 XWindo 等窗口系統(tǒng) Portlet 也有自己的窗口狀態(tài)( Window States ),規(guī)范要求 Portal 服務(wù)器必須支持以下三種窗口狀態(tài) :
    NORMAL ——普通 portlet 窗口,在這個(gè)狀態(tài)下通常是與其它 Portlet 共享 Portal 頁(yè)面; portal愛(ài)好者t8u/O/F;F
    MAXIMIZED ——最大化 portlet 窗口,獨(dú)占 Portal 頁(yè)面;
    J&?'X$az9u_eJ

    MINMIZED ——最小化 portlet 窗口 #la|M@!YP?2N g
    除此之外可以Portal服務(wù)器可以實(shí)現(xiàn)自定義的窗口狀態(tài)         
    在規(guī)范中對(duì)這些特性進(jìn)行定義,使得 Portlet 開(kāi)發(fā)者無(wú)需關(guān)心這方面實(shí)現(xiàn)細(xì)節(jié),另外在 processAction() 和 render() 方法中開(kāi)發(fā)者都可以通過(guò) getPortletMode() 和 getWindowState() 等方法獲得當(dāng)前 Portlet 的情況從而決定相關(guān)操作。

    3、Preferences & User Information say?d
      Portal 應(yīng)用一個(gè)重要功能就是“個(gè)性化”,一方面 Portal 服務(wù)器需要根據(jù)用戶(hù)的不同顯示不同的 Portlet ,另一方面同一個(gè) Portlet 也會(huì)根據(jù)用戶(hù)的偏好顯示不同的內(nèi)容。這就要求 Portlet 需要保存一些用戶(hù)的相關(guān)信息,例如一個(gè)股票實(shí)時(shí)信息的 Portlet 會(huì)根據(jù)用戶(hù)所關(guān)注的股票顯示相應(yīng)的信息。
      每個(gè) Portlet 都可能有自己相應(yīng)的個(gè)性化信息, JSR168 規(guī)范提供了 PortletPreferences 接口來(lái)操縱這些信息。   
    PortletPreferences 接口提供讀取、設(shè)置屬性的方法,如下:
    PortletPreferences prefs = req.getPreferences();
    String[] symbols = prefs.getValues(”preferredStockSymbols”, l&Fnew String[]{”ACME”,”FOO”}); www.portalfan.com*J4WF2WI qg
    #f_,[$j({6M

    d,NG1r(`*NUp

      在 JSR168 規(guī)范中 PortletPreferences 是用戶(hù)相關(guān)的,也就是通過(guò) getPreferences() 獲得的對(duì)象是與當(dāng)前登錄用戶(hù)綁定的, PortletPreferences 不會(huì)在用戶(hù)之間共享屬性。 lg4a {^a2zb q        ]
            PortletPreferences 提供了一個(gè)基本的讀取、設(shè)置個(gè)性化屬性的途徑,使得 Portlet 無(wú)需依賴(lài)具體的數(shù)據(jù)儲(chǔ)存環(huán)境(例如數(shù)據(jù)庫(kù)聯(lián)接、表結(jié)構(gòu)等等)就可以實(shí)現(xiàn)個(gè)性化并能夠在不同的 Portal 服務(wù)器之間移植。但是不應(yīng)該使用 PortletPreferences 來(lái)替代一般的數(shù)據(jù)庫(kù)功能。
           在實(shí)現(xiàn)個(gè)性化功能中經(jīng)常需要獲取各種用戶(hù)信息,例如用戶(hù)姓名、地址等等。因此 JSR168 也提供了一個(gè)獲取用戶(hù)信息的途徑,如下:SK2B7KK
    ~}
    n%R3I

    Map userInfo = (Map) request.getAttribute(PortletRequest.USER_INFO);
    String givenName = (userInfo!=null) ? (String) userInfo.get(“user.name.given”) : “”;
    String lastName = (userInfo!=null) ? (String) userInfo.get(“user.name.family”) : “”; 
      所獲得的 Map 對(duì)象是一個(gè)只讀對(duì)象,不能更改。但是用戶(hù)信息應(yīng)該包含什么內(nèi)容不在 JSR168 規(guī)范的范圍,事實(shí)上目前還沒(méi)有關(guān)于訪(fǎng)問(wèn)用戶(hù)信息的 Java 標(biāo)準(zhǔn), JSR168 提到在以后形成訪(fǎng)問(wèn)用戶(hù)信息的 Java 標(biāo)準(zhǔn)時(shí),當(dāng)前的機(jī)制就會(huì)被取代。

    4、Sessions K5u{g|)Q
    w

    portal愛(ài)好者SS"uu+~`
      作為一個(gè) Web 應(yīng)用組件, Portlet 同樣有 Session 這個(gè)機(jī)制用于跟蹤用戶(hù)操作,而與一般的 Web 應(yīng)用所不同的是 Portlet 的 Session 屬性有兩種作用域:fi
    PORTLET_SCOPE:屬性只能被設(shè)置它的Portlet訪(fǎng)問(wèn)
    APPLICATION_SCOPE:屬性可以被同一個(gè)Portal應(yīng)用中的所有Portlet訪(fǎng)問(wèn) 4VgU\;F

    PortletSession session = request.getSession(true);
    URL url = new URL(“http://www.foo.com”);
    session.setAttribute(“home.url”,url,PortletSession.APPLICATION_SCOPE);
    session.setAttribute(“bkg.color”,”RED”,PortletSession.PORTLET_SCOPE);  

    5、Request Dispatch & Portlet Tag
      在實(shí)現(xiàn) Portlet 應(yīng)用時(shí),開(kāi)發(fā)者往往會(huì)利用 Servlet 、 JSP 等資源,起碼會(huì)有兩個(gè)目的會(huì)這樣做: 為了利用現(xiàn)有的資源,簡(jiǎn)單地將已經(jīng)寫(xiě)好的 Servlet 、 JSP 應(yīng)用轉(zhuǎn)換成 Portlet ;  方便 Portlet 的表現(xiàn)層開(kāi)發(fā)。 Portlet 規(guī)范類(lèi)似于 Servlet 規(guī)范,在表現(xiàn)層開(kāi)發(fā)上遠(yuǎn)遠(yuǎn)不如 JSP ,因此需要利用 JSP 來(lái)開(kāi)發(fā)界面。JSR168 提供了類(lèi)似 Servlet RequestDispatcher 的接口來(lái)實(shí)現(xiàn)利用 Servlet 、 JSP 等資源的功能。
    例子如下: portal愛(ài)好者.c
    oJ#m|7SJ,M2vh

    String path = "/raisons.jsp?orderno=5"; portal愛(ài)好者'J0q|lh:Vu&[']
    PortletRequestDispatcher rd = context.getRequestDispatcher(path); rd.include(renderRequest, renderResponse);  
    當(dāng)一個(gè) JSP 頁(yè)面需要作為 Portlet 應(yīng)用的一部分, JSP 開(kāi)發(fā)者需要獲得相關(guān)的 Portlet 信息,為此 JSR168 提供了相應(yīng)的 JSP Tag 來(lái)實(shí)現(xiàn)相關(guān)的功能。通過(guò)相應(yīng)的 Portlet Tag , JSP 開(kāi)發(fā)者可以獲得相應(yīng)的 Portlet Request/Response 對(duì)象,產(chǎn)生 ActionURL 或者 RenderURL 等等。

    5、緩存qB&gWN(N_
    www.portalfan.com/yza"x1g-PB1C
      在前面中我們知道,用戶(hù)每次向Portal 應(yīng)用發(fā)送一個(gè)請(qǐng)求,該頁(yè)面中所有的 Portlet 都會(huì)被 Portlet 容器調(diào)用 render() 方法來(lái)產(chǎn)生相應(yīng)內(nèi)容。但是只有一個(gè) Portlet 才會(huì)處理用戶(hù)請(qǐng)求,其它不處理用戶(hù)請(qǐng)求的 Portlet 可能每次的顯示內(nèi)容都是不變的。
    因此 JSR168 定義了緩存機(jī)制來(lái)提供 Portal 應(yīng)用的效率。在 portlet.xml 中可以定義緩存的失效時(shí)間,如下:
    portal愛(ài)好者)y2C$\7m.E
    <portlet> R`Xh M5co i
    ...
    <expiration-cache>300</expiration-cache>
    ...
    </portlet> 
    這樣 Portlet 容器在調(diào)用 Portlet 的 render() 方法之前就會(huì)檢查有緩存是否已經(jīng)有效,如果有效的話(huà)就直接使用緩存內(nèi)容。 Portlet 緩存是跟客戶(hù)端相關(guān)的,不同的客戶(hù)端訪(fǎng)問(wèn)同一個(gè) Portlet 分別有自己的緩存而不會(huì)混淆。JSR168 對(duì)緩存機(jī)制的實(shí)現(xiàn)不是強(qiáng)制性的, Portal 服務(wù)器廠(chǎng)商可以自行決定是否實(shí)現(xiàn)這個(gè)特性。

    6、CSS Style Definition
      在一個(gè) Portlet 應(yīng)用中,所有 Portlet 應(yīng)該具有顯示上的一致性,例如使用相同的字體等等。為了到達(dá)這一點(diǎn), JSR168 定義了一套 CSS 元素名稱(chēng), Portlet 開(kāi)發(fā)者都應(yīng)該采用這套 CSS 來(lái)產(chǎn)生顯示內(nèi)容。這套 CSS 定義主要包含了 Fonts 、 Message (例如告警、通知等等)、 Sections 、 Forms 。

    7、Portlet VS Servlet
      Portlet 和 Servlet 是十分類(lèi)似的,只是由于 Servlet 無(wú)法達(dá)到 Portal 應(yīng)用的要求 JCP 才定義了新的 Portlet 規(guī)范,為了盡可能與現(xiàn)有的 Servlet 結(jié)合達(dá)到重復(fù)使用的目的, portlet 的規(guī)范利用了 Servlet 的規(guī)范,許多觀念都很相似的。在講述了 Portlet 的特性后,我們?cè)賮?lái)看看他們直接的異同。相似之處:]3b        AC|Z2g
    Portlet 也是 Java 技術(shù)的 web 組件 z&MBh[]        T6sEy
    Portlet 也是有特定的 container 在管理
    Portlet 可以動(dòng)態(tài)產(chǎn)生各種內(nèi)容 &X3Z$r0]W9J)_
    Portlet 的生命周期由 container 所管理 bf;YKx
    Portlet 和客戶(hù)端的互動(dòng)是通過(guò) request/response 的機(jī)制wZ

    不同之處: portal愛(ài)好者 D(e9g$MA2W{L
    Portlet 只產(chǎn)生 markup 信息片段,不是完整的網(wǎng)頁(yè)文件
    Portlet 不會(huì)和 URL 有直接的關(guān)系
    客戶(hù)端必須通過(guò) Portal 系統(tǒng)才能和 Portlet 互動(dòng)
    Portlet 有一些定義好的 request 處理, action request 以及 render request
    Portlet 默認(rèn)定義 portlet modes 及窗口狀態(tài)
    Portlet 可以在同一個(gè) portal 網(wǎng)頁(yè)之中存在多個(gè)

    Portlet有的功能而Servlet沒(méi)有:
    Portlet 能夠存取及儲(chǔ)存永久配置文件及定制資料
    Portlet 可以存取使用者數(shù)據(jù)
    Portlet 具有 URL 的重寫(xiě)功能夠在它的內(nèi)容中動(dòng)態(tài)建立連結(jié)
    Portlet Session 的屬性擁有兩個(gè)不同的范圍: application-scope 及 portlet-scope

    Portlet不具備而Servlet提供的功能
    Servlet 具有設(shè)置輸出的文字編碼 ( character set encoding) 方式
    Servlet 可以設(shè)置 HTTP 輸出的 header
    Servlet 才能夠接收客戶(hù)對(duì) portal 發(fā)出的 URL 請(qǐng)求
    ----------------------------------------------------2007-07-11更新-------------------------------------------------------------
    posted on 2007-07-11 14:48 Scott.Pan 閱讀(3621) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): Liferay

    FeedBack:
    # re: Portlet學(xué)習(xí)分析筆記
    2008-07-21 16:50 | lyj
    很好,學(xué)習(xí)了。
      回復(fù)  更多評(píng)論
      
    # re: Portlet學(xué)習(xí)分析筆記
    2011-08-04 14:02 | rev
    唉……  回復(fù)  更多評(píng)論
      
    # re: Portlet學(xué)習(xí)分析筆記
    2012-03-20 14:25 | chailieyang
    寫(xiě)的很不錯(cuò)。學(xué)習(xí)了  回復(fù)  更多評(píng)論
      
    # re: Portlet學(xué)習(xí)分析筆記[未登錄](méi)
    2014-09-12 10:33 | zz
    來(lái)學(xué)習(xí)一下  回復(fù)  更多評(píng)論
      
    <2014年9月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    常用鏈接

    留言簿(4)

    隨筆分類(lèi)

    隨筆檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 国产精品免费观看| 国产精品久久免费| 中文亚洲AV片不卡在线观看| 免费看内射乌克兰女| 亚洲片一区二区三区| 亚洲伊人久久大香线蕉影院| 国精产品一区一区三区免费视频| 亚洲精品tv久久久久久久久| 99热这里有免费国产精品| 亚洲色在线无码国产精品不卡| 亚洲精品国产精品乱码不卡| 99在线免费观看视频| 理论亚洲区美一区二区三区| 亚洲国产高清视频| 国产免费人成视频在线观看 | 自拍偷自拍亚洲精品播放| 久久久精品国产亚洲成人满18免费网站 | 亚洲成av人片天堂网| 成年女人男人免费视频播放 | 国产精品亚洲专一区二区三区| 久久精品国产亚洲网站| 好爽…又高潮了免费毛片| 三级黄色片免费看| 亚洲国产精品无码久久九九大片| 亚洲中文字幕在线第六区| 性感美女视频在线观看免费精品| 国产一级婬片A视频免费观看| 亚洲国产精品成人午夜在线观看| 91亚洲精品视频| 久久精品国产亚洲7777| 日韩a级毛片免费观看| 91在线老王精品免费播放| 国产免费福利体检区久久| 亚洲国产成人久久一区二区三区 | 国产裸体美女永久免费无遮挡| 亚洲乱码卡三乱码新区| 国产v亚洲v天堂无码网站| 国产免费变态视频网址网站| 日韩av无码成人无码免费| 免费国产黄网站在线观看视频 | 国产一精品一av一免费爽爽|