<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ò)上很多,谷歌或是百度一下可以很容易搜索到,下面我把自己覺得容易混淆和模糊的幾個知識點做下簡單介紹:
    1、Portlet Request & URL

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

           為了接受用戶請求,一個 Portlet 需要有一個指向其自身的 URL ,例如用在 HTTP FORM 的 ACTION 字段。但是與 Servlet 不同的是, Portlet 不是一個完整的頁面而只是頁面的一部分,一個 Portlet 可以出現(xiàn)在多個頁面中,所以 Portlet 無法綁定具體的 URL 。在 JSR168 規(guī)范中定義了 PortletURL 接口,通過該接口可以得到指向 Portlet 自身的 URL ,對應(yī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ù)器廠商通常都會利用 URL 增加一些產(chǎn)品相關(guān)的參數(shù),因此強烈建議在 Portlet 中提交用戶請求采用 POST 方式。

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

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

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

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

    3、Preferences & User Information say?d
      Portal 應(yīng)用一個重要功能就是“個性化”,一方面 Portal 服務(wù)器需要根據(jù)用戶的不同顯示不同的 Portlet ,另一方面同一個 Portlet 也會根據(jù)用戶的偏好顯示不同的內(nèi)容。這就要求 Portlet 需要保存一些用戶的相關(guān)信息,例如一個股票實時信息的 Portlet 會根據(jù)用戶所關(guān)注的股票顯示相應(yīng)的信息。
      每個 Portlet 都可能有自己相應(yīng)的個性化信息, JSR168 規(guī)范提供了 PortletPreferences 接口來操縱這些信息。   
    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 是用戶相關(guān)的,也就是通過 getPreferences() 獲得的對象是與當前登錄用戶綁定的, PortletPreferences 不會在用戶之間共享屬性。 lg4a {^a2zb q        ]
            PortletPreferences 提供了一個基本的讀取、設(shè)置個性化屬性的途徑,使得 Portlet 無需依賴具體的數(shù)據(jù)儲存環(huán)境(例如數(shù)據(jù)庫聯(lián)接、表結(jié)構(gòu)等等)就可以實現(xiàn)個性化并能夠在不同的 Portal 服務(wù)器之間移植。但是不應(yīng)該使用 PortletPreferences 來替代一般的數(shù)據(jù)庫功能。
           在實現(xiàn)個性化功能中經(jīng)常需要獲取各種用戶信息,例如用戶姓名、地址等等。因此 JSR168 也提供了一個獲取用戶信息的途徑,如下: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 對象是一個只讀對象,不能更改。但是用戶信息應(yīng)該包含什么內(nèi)容不在 JSR168 規(guī)范的范圍,事實上目前還沒有關(guān)于訪問用戶信息的 Java 標準, JSR168 提到在以后形成訪問用戶信息的 Java 標準時,當前的機制就會被取代。

    4、Sessions K5u{g|)Q
    w

    portal愛好者SS"uu+~`
      作為一個 Web 應(yīng)用組件, Portlet 同樣有 Session 這個機制用于跟蹤用戶操作,而與一般的 Web 應(yīng)用所不同的是 Portlet 的 Session 屬性有兩種作用域:fi
    PORTLET_SCOPE:屬性只能被設(shè)置它的Portlet訪問
    APPLICATION_SCOPE:屬性可以被同一個Portal應(yīng)用中的所有Portlet訪問 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
      在實現(xiàn) Portlet 應(yīng)用時,開發(fā)者往往會利用 Servlet 、 JSP 等資源,起碼會有兩個目的會這樣做: 為了利用現(xiàn)有的資源,簡單地將已經(jīng)寫好的 Servlet 、 JSP 應(yīng)用轉(zhuǎn)換成 Portlet ;  方便 Portlet 的表現(xiàn)層開發(fā)。 Portlet 規(guī)范類似于 Servlet 規(guī)范,在表現(xiàn)層開發(fā)上遠遠不如 JSP ,因此需要利用 JSP 來開發(fā)界面。JSR168 提供了類似 Servlet RequestDispatcher 的接口來實現(xiàn)利用 Servlet 、 JSP 等資源的功能。
    例子如下: portal愛好者.c
    oJ#m|7SJ,M2vh

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

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

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

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

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

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

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

    FeedBack:
    # re: Portlet學(xué)習(xí)分析筆記
    2008-07-21 16:50 | lyj
    很好,學(xué)習(xí)了。
      回復(fù)  更多評論
      
    # re: Portlet學(xué)習(xí)分析筆記
    2011-08-04 14:02 | rev
    唉……  回復(fù)  更多評論
      
    # re: Portlet學(xué)習(xí)分析筆記
    2012-03-20 14:25 | chailieyang
    寫的很不錯。學(xué)習(xí)了  回復(fù)  更多評論
      
    # re: Portlet學(xué)習(xí)分析筆記[未登錄]
    2014-09-12 10:33 | zz
    來學(xué)習(xí)一下  回復(fù)  更多評論
      
    <2007年7月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费在线看片网站| 国产精品麻豆免费版| 亚洲av无码国产精品色午夜字幕| 88xx成人永久免费观看| 亚洲av无码一区二区三区网站 | 国产.亚洲.欧洲在线| 免费H网站在线观看的| 性xxxx黑人与亚洲| 最新中文字幕免费视频| 亚洲AV无码一区二区三区性色| 免费鲁丝片一级在线观看| 久久精品国产亚洲AV电影网| 国产成人免费a在线视频app| 暖暖免费中文在线日本| 亚洲熟妇丰满多毛XXXX| 久久国产免费观看精品3| 亚洲av日韩av综合| 国产美女a做受大片免费| 一级成人a免费视频| 亚洲成人中文字幕| 动漫黄网站免费永久在线观看| 亚洲国产区男人本色| 亚洲国产小视频精品久久久三级| 中文字幕a∨在线乱码免费看| 亚洲欧洲国产日韩精品| 午夜无遮挡羞羞漫画免费| 一级做受视频免费是看美女| 久久精品国产99精品国产亚洲性色| 5g影院5g天天爽永久免费影院| 亚洲精品人成网线在线播放va| 亚洲XX00视频| 最近2019免费中文字幕视频三| 亚洲欧洲无码AV不卡在线| 亚洲成a人片在线观看老师| 久久不见久久见免费视频7| 亚洲欧美日韩一区二区三区在线| 国产AV无码专区亚洲AV漫画 | h视频在线免费观看| 亚洲的天堂av无码| 亚洲国产aⅴ综合网| 97性无码区免费|