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

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

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

    談笑有鴻儒,往來無白丁

    在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽
    IBM Portal 開發系列講座:

    開發登錄并讀取OA用戶郵箱信息的portlet

    IBM China SoftWare Development Lab 鄭文平

    內容簡介:

    我們用ibm自帶的開發工具WSAD(已安裝portlet toolkit包),開發一個Portlet,實現以下功能:
    l 用戶從這個portlet登錄,登錄成功后讀取該用戶在OA服務器上的郵件系統,并返回個人郵件信息、歡迎信息,轉入并顯示在指定頁面;
    l 用戶不能從Portal系統原登錄頁面登錄。即:如果用戶驗證失敗,系統將返回到該登錄portlet,而非系統自帶的登錄頁面;
    l 用戶可以從這個portlet直接進入到指定的任意邏輯、物理頁面。

    其數據流轉是這樣的:

    [開發過程]

    1、首先編寫這個類,用來讀取OA系統中任一用戶的郵件系統:

    package youjiantishi;

    /**
    * 這個類用來讀取某一用戶的郵件內容:
    *
    * 維護:zhengwp@dhcc.com.cn 鄭文平
    *
    * 編碼:趙建業 時間:2004年11月
    */

    import java.util.*;
    import java.io.*;
    import javax.mail.*;
    import javax.mail.event.*;
    import javax.mail.internet.*;
    import javax.activation.*;

    public class msgOAshow {

    static String protocol;
    static String host = null;
    static String user = null;
    static String password = null;
    static String mbox = null;
    static String url = null;
    static int port = -1;
    static boolean verbose = false;
    static boolean debug = false;
    static boolean showStructure = false;
    static boolean showMessage = false;
    static boolean showAlert = false;
    static boolean saveAttachments = false;
    static int attnum = 1;
    static int dhcc_totalmsg=0;
    static int dhcc_newmsg=0;

    public int get_total()
    {
    return dhcc_totalmsg;
    }
    public int get_new()
    {
    return dhcc_newmsg;
    }

    public msgOAshow()
    {
    java.io.InputStream inputstream = getClass().getResourceAsStream("mailaddress.properties");
    Properties properties = new Properties();
    try
    {
    properties.load(inputstream);
    }
    catch(Exception exception)
    {
    System.err.println("Can not read the properties file. Make sure db.properties is in the CLASSPATH");
    return;
    }
    host = properties.getProperty("address", "localhost");
    protocol=properties.getProperty("protocol", "pop3");
    mbox=properties.getProperty("mbox", "INBOX");

    }

    public static int getEmailMain(String argv[]) {
    int msgnum = -1;
    int optind;
    user=argv[0];
    password=argv[1];

    try {

    // Get a Properties object
    Properties props = System.getProperties();

    // Get a Session object
    Session session = Session.getInstance(props, null);
    session.setDebug(debug);


    // Get a Store object
    Store store = null;
    if (url != null) {
    URLName urln = new URLName(url);
    store = session.getStore(urln);
    if (showAlert) {
    store.addStoreListener(new StoreListener() {
    public void notification(StoreEvent e) {
    String s;
    if (e.getMessageType() == StoreEvent.ALERT)
    s = "ALERT: ";
    else
    s = "NOTICE: ";
    //System.out.println(s + e.getMessage());
    }
    });
    }
    store.connect();
    } else {
    if (protocol != null)
    store = session.getStore(protocol);
    else
    store = session.getStore();

    // Connect
    if (host != null || user != null || password != null)
    store.connect(host, port, user, password);
    else
    store.connect();
    }


    // Open the Folder

    Folder folder = store.getDefaultFolder();
    if (folder == null) {
    //System.out.println("No default folder");
    //System.exit(1);
    return -1;
    }

    if (mbox == null)
    mbox = "INBOX";
    folder = folder.getFolder(mbox);
    if (folder == null) {
    //System.out.println("Invalid folder");
    //System.exit(1);
    return -1;
    }

    // try to open read/write and if that fails try read-only
    try {
    folder.open(Folder.READ_WRITE);
    } catch (MessagingException ex) {
    folder.open(Folder.READ_ONLY);
    }
    int totalMessages = folder.getMessageCount();

    if (totalMessages == 0) {
    //System.out.println("Empty folder");
    folder.close(false);
    store.close();
    dhcc_totalmsg=0;
    dhcc_newmsg=0;
    return 0;
    //System.exit(1);
    }

    int newMessages = folder.getNewMessageCount();
    System.out.println("Total messages = " + totalMessages);
    System.out.println("New messages = " + newMessages);
    //System.out.println("-------------------------------");
    dhcc_totalmsg=totalMessages;
    dhcc_newmsg=newMessages;



    folder.close(false);
    store.close();
    } catch (Exception ex) {
    System.out.println("Oops, got exception! " + ex.getMessage());
    //ex.printStackTrace();
    //System.exit(1);
    return -2;
    }
    return 0;
    }


    }

    2、用WSAD開發一個使用憑證保險庫的portlet,最好選用共享保險槽。接下來,在Portlet的View.jsp頁面中我們提供用戶登錄表單(表單源代碼略):
    <wps:if loggedIn="no"> //如果用戶沒有登錄,我們顯示為登錄表單:

    該表單接收到用戶名和密碼后,提交到ChenkLogin.jsp文件。
    <wps:if loggedIn="yes"> //當用戶登錄后,調用這個類讀取OA系統:
    <jsp:useBean id="msgOAshow" scope="page" class="youjiantishi.msgOAshow"/>
    <%
    String MyName=(String)(session.getAttribute("userid"));
    String MyPass=(String)session.getAttribute("password");
    String argv[]=new String[2];
    argv[0]=MyName;
    argv[1]=MyPass;
    boolean b_flag=false;
    int i=msgOAshow.getEmailMain(argv);
    if (i!=0)
    {
    //out.println("讀取用戶時發生錯誤!");
    b_flag=true;
    }
    else
    {
    b_flag=false;
    }
    %>
    然后,將讀到的內容顯示出來(源代碼略),并添加歡迎信息:

    圖:獲取該用戶的郵箱信息,并顯示出來。

    我們在這個jsp頁面上顯示出該用戶的郵箱信息,并顯示歡迎該用戶的字樣。該歡迎信息是這樣獲取的:
    l 首先,引入wps標簽庫:
    <%@ taglib uri="/WEB-INF/tld/engine.tld" prefix="wps" %>
    引入該標簽庫后,我們就可以使用其中的標簽了,比如上面用到的:
    <wps:if loggedIn="no"> //當用戶沒有登錄時。
    </wps:if>
    l 我們引入歡迎標簽:welcome:
    <wps:text key="welcome" bundle="nls.engine">
    <wps:textParam><wps:user attribute="givenName"/></wps:textParam>
    </wps:text>
    我們必須在wps包內找到名字為nsl.engine的標簽文件,并添加或者修改鍵值為welcome的標簽,并設置成我們要求的格式。這部分具體開發內容同于一般的標簽開發,這里不再贅述。有興趣的朋友可以自己查找資料研究,也可以與作者討論。
    3、新建checklogin.jsp,用來將用戶信息提交到portal系統,實現單點登錄。
    l 新建一個表單,用來將用戶信息提交到Portal系統的登陸action。
    <form method="POST" action='/wps/portal/!ut/p/.cmd/li' name="LoginPage"> //
    <table width="196" height="150" cellspacing="0">
    <tr>
    <%
    String username=request.getParameter("userid");
    String password=request.getParameter("password");
    %>
    <td>
    <input name="userid" type="hidden" value="<%=username%>">
    </td>
    <td>
    <input name="password" type="hidden" value="<%=password%>">
    </td>
    </tr>
    </ta ble>
    </form>
    這個表單用來將提取到的用戶信息,提交到portal系統的login系統。其中這里的action我們先使用了編譯后的代碼,如果您重裝了Portal系統,您必須更改此portlet的選項,以符合portal系統登陸要求。讀到這里,如果您是一個標簽方面的高手,您可能已經猜到了更好的解決方案。是的,將這個portelt切換到配置模式,不如直接引入wps相應地標簽庫,使用一個簡單的標簽,就可以用鍵值將之寫死,這些內容實現起來比較麻煩,筆者將在以后的相關文章中詳細介紹,有興趣的朋友,可以關注我的專欄。
    l 其他該注意的問題:
    到這里該Portlet可以算是開發完了,這里提醒開發者該注意的問題:
    1)Portal系統的action處理完用戶登錄后,會返回提交者,即:checklogin.jsp。這是我們所不希望的,因為系統一旦返回到checklogin,checklogin會再次提交!是的,您已經想到了,這會生成一個死循環,計算機的聲卡會發出啪啪啪的聲音,就是這個原因造成的。解決這個問題,實際上非常簡單,我們可以在session里設置一個開關,如果checklogin沒有提交過,就打開這個開關,讓系統提交;一旦提交過了,就把這個開關關死,死循環的問題就OK了。參考代碼如下:
    if (my_flagid==null)
    my_flagid="";
    if (my_flagid.equals("0"))
    {
    session.setAttribute("b_getPortaPass","1");
    …….

    2)如果登錄成功,我們可以將location轉向到myportal的任何頁面,
    如果登錄不成功,系統會向用戶要Session,自然會重定向到登錄葉面,這樣,我們的設計意圖也就達到了。


    作者簡介:鄭文平,“神狐”軟件工作室創立者,IBM WebSpher Portal產品開發人員,原北京東華合創軟件院軟件工程師,Portal信息化專員,長期從事Portal(尤其是IBM Websphere Portal)開發,曾參與并引領了北京馳普企業門戶、山東新汶礦務局遠程調度系統、中國石化齊魯公司綜合數據平臺、北京供電局虛擬門戶產品,北京航信企業門戶等多個Portal項目的開發。
    如果您有以下需要,歡迎您與SagFox SoftWare 聯系:
    1、如果您的公司有IBM WebSpher Portal 項目需要實施但缺少必需的技術力量,而您又不愿安排工程師們邊學習邊開發而影響項目質量,歡迎您把項目外包給 SagFox SoftWare,或者以項目合作的方式聯合開發。
    2、如果您們是一個Java 開發者并打算投身Portal領域,歡迎您接受 SagFox SoftWare 針對公司技術人員的開發培訓,SagFox SoftWare 同時開展針對個人的技術指導與職業規劃,助您謀得高薪。
    3、如果您是一個嫻熟的Portal開發者,歡迎您加盟SagFox SoftWare,我們的團隊正在飛速發展。我們也歡迎入門者加入我們的討論組,SagFox SoftWare 盡力解答欠成熟開發者的提問,并以提攜后起者為樂趣,希望國內的門戶實施少一些“豆腐渣”工程,我們愿貢獻一點力量。
    您可以通過zhengwp@cn.ibm.com 或者 zhengwenping@126.com 與SagFox SoftWare取得聯系。本文作者的msn是: zhengwp@cn.ibm.com
    posted on 2006-09-20 10:05 壞男孩 閱讀(2525) 評論(0)  編輯  收藏 所屬分類: 資源整合
    主站蜘蛛池模板: 免费能直接在线观看黄的视频| 亚洲国产高清视频在线观看| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲区小说区激情区图片区| 一区二区三区免费在线观看| 亚洲人成无码www久久久| 牛牛在线精品免费视频观看| 亚洲 小说区 图片区 都市| 日韩精品视频在线观看免费| 亚洲一区精品伊人久久伊人| 久久免费国产精品| 亚洲韩国精品无码一区二区三区 | 亚洲一级特黄特黄的大片| 最近中文字幕免费mv视频7| 亚洲va在线va天堂成人| 成人片黄网站色大片免费| 亚洲精品av无码喷奶水糖心| 国产一级高清视频免费看| 无码 免费 国产在线观看91| 国产亚洲精aa成人网站| 青青操视频在线免费观看| 最近中文字幕高清免费中文字幕mv | 91成年人免费视频| 亚洲AV无码一区二区三区牛牛| 午夜免费福利在线| 精品成人一区二区三区免费视频 | 亚洲AV永久纯肉无码精品动漫| 一级特黄特色的免费大片视频| 国产亚洲一区二区三区在线不卡| 国产免费爽爽视频在线观看| 亚洲美女大bbbbbbbbb| 无人影院手机版在线观看免费| 亚洲AV永久无码天堂影院| 免费在线观看黄网站| 99免费在线视频| 666精品国产精品亚洲| 成人爽A毛片免费看| 暖暖免费中文在线日本| 亚洲成色www久久网站夜月| 18禁网站免费无遮挡无码中文| 亚洲s码欧洲m码吹潮|