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

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

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

    afunms

    My Software,My Dream—Forge a more perfect NMS product.

    研究portal的實(shí)現(xiàn)

    研究Java來實(shí)現(xiàn)Portal。


    1) Dynamic Include
    首先,我們采用最簡單的思路,我們用100個JSP文件(1.jsp, 2.jsp, 3.jsp, … 100.jsp等),代表100個Portlet。
    用戶頁面MyPage.jsp包含用戶選定的多個Portlet。
    現(xiàn)在,假設(shè)用戶選取的Portlet為1.jsp, 3.jsp, 7.jsp等3個Portlet,那么我們?nèi)绾卧贛yPage.jsp中顯示這些Portlet?最直觀的做法是,用jsp:include。比如:
    <table>
    <tr><td>
    <jsp:include page=”1.jsp” />
    </td></tr>
    <tr><td>
    <jsp:include page=”3.jsp” />
    </td></tr>
    <tr><td>
    <jsp:include page=”7.jsp” />
    </td></tr>
    </table>
    由于<jsp:include>只能指定固定的jsp文件名,不能動態(tài)指定jsp文件名。我們需要把<jsp:include>翻譯為Java code – RequestDispatcher.include();
    下面我們換成這種寫法。
    Java代碼
    <table>  
    <tr><td>  
    <% request.getRequestDispatcher(”1.jsp”).include(request, response); />  
    </td></tr>  
    <tr><td>  
    <% request.getRequestDispatcher(”3.jsp”).include(request, response); />  
    </td></tr>  
    <tr><td>  
    <% request.getRequestDispatcher(”7.jsp”).include(request, response); />  
    </td></tr>  
    </table> 

    <table>
    <tr><td>
    <% request.getRequestDispatcher(”1.jsp”).include(request, response); />
    </td></tr>
    <tr><td>
    <% request.getRequestDispatcher(”3.jsp”).include(request, response); />
    </td></tr>
    <tr><td>
    <% request.getRequestDispatcher(”7.jsp”).include(request, response); />
    </td></tr>
    </table>

    進(jìn)一步改進(jìn)MyPage.jsp。
    Java代碼
    <% String[] fileNames = {“1.jsp”, “3.jsp”, “7.jsp”}; %>  
    <table>  
    <% for(int i = 0; i < fileNames.length; i++) {  
      String fileName = fileName s[i]; %>  
    <tr><td>  
    <% request.getRequestDispatcher(fileName).include(request, response); />  
    </td></tr>  
    <% } // end for %>  
    </table> 


    其中的fileNames的內(nèi)容可以各種各樣,只要RequestDispatcher能夠處理。
    比如Velocity,fileNames = {“1.vm”, “3.vm”, “7.vm”};
    比如URL,fileNames = {“/portlet1.do”, “/portlet3.do”, “/portlet4.do”};
    我們可以看到,如果我們從用戶配置中讀取fileNames的內(nèi)容,這就是一個簡單的Portal實(shí)現(xiàn)。
    Java代碼
    <% String[] fileNames = (String[])session.getAttribute(“portlets.config”); %>  
    <table>  
    <% for(int i = 0; i < fileNames.length; i++) {  
      String fileName = fileNames[i]; %>  
    <tr><td>  
    <% request.getRequestDispatcher(fileName).include(request, response); />  
    </td></tr>  
    <% } // end for %>  
    </table> 


    2) Portlet Interface
    下面我們來擴(kuò)展這個例子。
    假設(shè)每個Portlet都規(guī)定實(shí)現(xiàn)一個Portlet接口。
    Java代碼
    interface Portlet {  
      void render(request, response);  
    };  
     
    MyPage.jsp如下:  
     
    <% String[] portletClassNames = (String[])session.getAttribute(“portlets.config”); %>  
    <table>  
    <% for(int i = 0; i < portletClassNames.length; i++) {  
      String className = portletClassNames[i];  
      Portlet portlet = (Portlet)Class.forName(className).newInstance(); %>  
    <tr><td>  
    <% portlet. render (request, response); />  
    </td></tr>  
    <% } // end for %>  
    </table>  
     
    Portlet類的示例代碼如下:  
    public class Portlet7{  
      public void render(request, response){  
        request.getRequestDispatcher(“7.jsp”).include(request, response);  
      }  
    }; 

    interface Portlet {
      void render(request, response);
    };

    MyPage.jsp如下:

    <% String[] portletClassNames = (String[])session.getAttribute(“portlets.config”); %>
    <table>
    <% for(int i = 0; i < portletClassNames.length; i++) {
      String className = portletClassNames[i];
      Portlet portlet = (Portlet)Class.forName(className).newInstance(); %>
    <tr><td>
    <% portlet. render (request, response); />
    </td></tr>
    <% } // end for %>
    </table>

    Portlet類的示例代碼如下:
    public class Portlet7{
      public void render(request, response){
        request.getRequestDispatcher(“7.jsp”).include(request, response);
      }
    };

    上述代碼是Portal顯示Portlet的核心流程的一個簡化版本。
    JSR168 Portlet規(guī)范里面定義了真正的Portlet接口定義。

    posted on 2011-08-28 12:29 afunms 閱讀(215) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    My Links

    News

    留言簿(18)

    隨筆檔案

    相冊

    搜索

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲日韩精品一区二区三区| 亚洲色偷偷综合亚洲av78| 亚洲电影中文字幕| 亚洲的天堂av无码| 亚洲av无码日韩av无码网站冲| 高潮内射免费看片| 久久99免费视频| 成人免费一区二区三区在线观看| 中文字幕亚洲图片| 亚洲ⅴ国产v天堂a无码二区| 亚洲av无码不卡久久| 精品在线免费视频| 99久久99久久免费精品小说| 成年女人毛片免费观看97| 亚洲精品无码久久毛片| 亚洲美女aⅴ久久久91| 国产精品无码亚洲精品2021| a级毛片毛片免费观看久潮喷| 在线观看免费高清视频| 亚洲日韩涩涩成人午夜私人影院| 亚洲综合久久1区2区3区| 免费看一级一级人妻片| 国产精品久久永久免费| 亚洲综合激情另类专区| 亚洲无mate20pro麻豆| 最新亚洲成av人免费看| 午夜电影免费观看| 亚洲综合色一区二区三区小说| 四虎精品免费永久免费视频| 麻豆国产精品免费视频| 亚洲色无码一区二区三区| 亚洲国产精品美女久久久久| 99热这里只有精品6免费| 亚洲午夜国产片在线观看| 久久亚洲国产成人影院| 99re在线免费视频| 亚洲中文字幕无码久久2017| 在线观看亚洲精品专区| 免费观看成人毛片a片2008| 亚洲bt加勒比一区二区| 一区二区三区在线免费观看视频|