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

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

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

    轉(zhuǎn)載:http://dev.21tx.com/java/ejb/

    編寫(xiě)第一個(gè)EJB應(yīng)用程序

       搞清了基本的分布式對(duì)象應(yīng)用程序機(jī)理,下面我們就來(lái)實(shí)地做一個(gè)簡(jiǎn)單的EJB應(yīng)用程序,一步一步找著做,你會(huì)發(fā)現(xiàn)——它真的不難!

       EJB中的Beans有兩種,一種是會(huì)話Bean(SessionBean),一種是實(shí)體Bean(EntityBean)。其中,SessionBean又分為有狀態(tài)(Stateful)和無(wú)狀態(tài)(Stateless)兩種,EntityBean又分為容器管理(Container Managed)和自管理(Bean Managed)兩種。我們要做的第一個(gè)EJB應(yīng)用程序是:寫(xiě)一個(gè)無(wú)狀態(tài)會(huì)話Bean(Stateless SessionBean)。

    這個(gè)程序的功能是: 實(shí)現(xiàn)一個(gè)遠(yuǎn)程加密、解密演示系統(tǒng),用戶(hù)把一段明文發(fā)到服務(wù)器端,服務(wù)器端執(zhí)行一定的加密算法(按先后順序倒排)得到密文,然后把加密完成后的密文發(fā)到客戶(hù)端顯示給用戶(hù);用戶(hù)還可發(fā)一段加密后的密文到服務(wù)器端,服務(wù)器端執(zhí)行一定的解密算法(倒排)得到明文,然后回傳顯示給用戶(hù)。

    注: 這里使用的是Windows平臺(tái),并且假定JDK已經(jīng)裝好,并且認(rèn)為你至少是編過(guò)一個(gè)Java程序的程序員。

    第一步 下載、安裝J2EE開(kāi)發(fā)工具箱

       編寫(xiě)EJB應(yīng)用程序必須下載相關(guān)的工具箱才行,作為學(xué)習(xí)試驗(yàn)之用,不須采用很高檔的應(yīng)用服務(wù)器(比如:WebLogic、WebSphere等),只需采用SUN公司提供的免費(fèi)開(kāi)發(fā)包就可以了,下載地址為:ftp://202.116.77.69/development/Java/j2sdkee1.2/j2sdkee-img_java ejb/2_1-win.exe。

       下載后執(zhí)行這個(gè)應(yīng)用程序,即可完成J2EESDK的本地安裝(假定安裝在C:\j2sdkee1.3目錄)。安裝之后還不能立刻用,需要把C:\j2sdkee1.3\lib\j2ee.jar加到系統(tǒng)的ClassPath變量中去,裝過(guò)JDK的朋友對(duì)此肯定不會(huì)陌生。做完這些后,最終系統(tǒng)的ClassPath應(yīng)該至少有.;C:\j2sdk1.4.0-beta3\lib\tools.jar; C:\j2sdk1.4.0-beta3\lib\dt.jar;C:\j2sdkee1.3\lib\j2ee.jar這幾項(xiàng)。

       然后,把C:\j2sdkee1.3\bin目錄加到系統(tǒng)的Path變量中,也就是說(shuō),系統(tǒng)的Path變量至少應(yīng)該有%PATH%;C:\j2sdkee1.3\bin;C:\j2sdk1.4.0-beta3\bin這幾項(xiàng)。

    以上兩步其實(shí)和配置J2SE的方法類(lèi)似,配過(guò)JDK的朋友一定不陌生。

    第二步 建立應(yīng)用程序目錄結(jié)構(gòu)

       如你所知的,Java程序中目錄結(jié)構(gòu)是很重要的,因?yàn)镴ava中的包(package)是與目錄相關(guān)的,同時(shí),目錄結(jié)構(gòu)不同,程序打包生成(jar)的結(jié)構(gòu)也不同,所以必須引起重視。

       我們編寫(xiě)的第一個(gè)EJB應(yīng)用程序的目錄結(jié)構(gòu)如圖二所示,由上可見(jiàn),所有的java程序都放在securitybeans目錄下(它們都屬于一個(gè)名為securitybeans的package)。客戶(hù)代碼主要由JSP和html文件組成:musecurityjsp.html文件為靜態(tài)網(wǎng)頁(yè),主要用于顯示系統(tǒng)的首頁(yè),提供用戶(hù)輸入明文/密文的界面,并負(fù)責(zé)把用戶(hù)輸入的內(nèi)容提交給下一個(gè)頁(yè)面(SecuriryProcessPage.jsp);SecurityProcessPage.jsp文件為用JSP(Java Server Pages)編寫(xiě)的動(dòng)態(tài)網(wǎng)頁(yè),主要用于生成EJB對(duì)象實(shí)例,并向EJB對(duì)象發(fā)送加密/解密請(qǐng)求,并在頁(yè)面上顯示加密/解密結(jié)果供用戶(hù)瀏覽。


    ?編寫(xiě)EJB代碼

       由前述的目錄結(jié)構(gòu)可知,EJB代碼包括三個(gè)Java文件。

       1、Security.java是一個(gè)接口,它定義了基本的加密、解密調(diào)用接口。注意,由于Security接口可生成EJB對(duì)象,所以它必須繼承自EJBObject接口。其源代碼如下:

    文件“Security.java”

    package securitybeans;

    import java.rmi.RemoteException;

    import javax.ejb.EJBObject;

    public interface Security extends EJBObject

    {

    public String encrypt( String strSource ) throws RemoteException;

    public String decrypt( String strTarget ) throws RemoteException;

    }/* Security */

       2、SecurityHome接口可生成EJBHome對(duì)象,它負(fù)責(zé)直接與客戶(hù)打交道,接收客戶(hù)的請(qǐng)求,返回處理結(jié)果。在EJB規(guī)范中,SecurityHome必須繼承自EJBHome接口。其源代碼如下:

    文件“SecurityHome.java”

    package securitybeans;

    import java.rmi.RemoteException;

    import javax.ejb.EJBHome;

    import javax.ejb.CreateException;

    public interface SecurityHome extends EJBHome

    {

    Security create() throws CreateException, RemoteException;

    }/* EJBHome */

       3、SecurityBean類(lèi)才是真正做“正事”的類(lèi),它負(fù)責(zé)對(duì)SecurityHome對(duì)象傳來(lái)的字符串執(zhí)行加密、解密算法,將得到的結(jié)果返回給SecurityHome對(duì)象。它是一個(gè)Stateless SessionBean,按照EJB規(guī)范,必須實(shí)現(xiàn)SessionBean接口。其源代碼如下:

    文件“ScurityBean.java”

    package securitybeans;

    import java.rmi.RemoteException;

    import javax.ejb.SessionBean;

    import javax.ejb.SessionContext;

    public class SecurityBean implements SessionBean

    {

    public String encrypt( String strSource )

    {

    String strTarget = "";

    for ( int i = strSource.length() - 1; i >= 0; i -- )

    {

    strTarget += strSource.charAt( i );

    }//for


    return strTarget;

    }//encrypt()


    public String decrypt( String strTarget )

    {

    String strSource = "";


    for ( int i = strTarget.length() - 1; i >= 0; i -- )

    {

    strSource += strTarget.charAt( i );

    }//for


    return strSource;

    }//decrypt()


    public void ejbActivate() {}//ejbActivate()

    public void ejbRemove() {}//ejbRemove()

    public void ejbPassivate() {}//ejbPassivate()

    public void setSessionContext( SessionContext sc ) {}//setSessionContext()

    public void ejbCreate() {}//ejbCreate()

    public void ejbLoad() {}//ejbLoad()

    public void ejbStore() {}//ejbStore()

    }/* SecurityBean */

       SecurityBean中的ejbActivate()、ejbPassivate()等方法都是SessionBean接口中的方法,由于本程序中這里不需要有實(shí)際內(nèi)容,因此直接實(shí)現(xiàn)它就可以了。


    編寫(xiě)客戶(hù)代碼

       便完了EJB代碼,下面我們來(lái)寫(xiě)客戶(hù)代碼。

       1、mysecurityJSP.html文件用于顯示一個(gè)靜態(tài)的網(wǎng)頁(yè),它提供了用戶(hù)錄入明文/密文的界面,使用戶(hù)能夠錄入自己的內(nèi)容然后提交給服務(wù)器端。其源代碼如下:

    文件mysecurityjsp.html

    < HTML >
    < HEAD >
    < TITLE >EJB示例:數(shù)據(jù)加密、解密演示系統(tǒng)< /TITLE >
    < /HEAD >
    < BODY BACKGROUND="bg.gif" >

    < CENTER >

    < H1 >數(shù)據(jù)加密解密演示系統(tǒng)< IMG SRC="duke.gif" >< /H1 >
    < BR >< BR >< BR >
    < FORM METHOD="GET" ACTION="SecurityJSPAlias" >
    < TABLE WIDTH="700" HEIGHT="300" BORDER="1" >
    < TR >
    < TD ALIGN="CENTER" >
    < H2 >——加密請(qǐng)求窗——< /H2 >
    < P >
    請(qǐng)輸入明文:
    < P >
    < INPUT TYPE="TEXT" NAME="SOURCECONTENT" >< /INPUT >
    < P >
    < INPUT TYPE="SUBMIT" VALUE=" 提 交 " >
    < INPUT TYPE="RESET" VALUE=" 重 置 " >
    < /TD >
    < TD ALIGN="CENTER" >
    < H2 >——解密請(qǐng)求窗——< /H2 >
    < P >
    請(qǐng)輸入密文:
    < P >
    < INPUT TYPE="TEXT" NAME="TARGETCONTENT" >< /INPUT >
    < P >
    < INPUT TYPE="SUBMIT" VALUE=" 提 交 " >
    < INPUT TYPE="RESET" VALUE=" 重 置 " >
    < /TD >
    < /TR >
    < /TABLE >
    < /FORM >

    < /CENTER >

    < /BODY >
    < /HTML >

       2、SecurityProcessPage.jsp文件是用JSP編寫(xiě)的動(dòng)態(tài)網(wǎng)頁(yè),它用于處理mysecurityjsp.html提交過(guò)來(lái)的內(nèi)容,并查找、生成EJBHome對(duì)象,發(fā)送加密/解密請(qǐng)求,并將結(jié)果傳回客戶(hù)端。其源代碼如下:

    文件“SecurityProcessPage.jsp”

    < %@ page language="Java" info="數(shù)據(jù)加密解密信息處理系統(tǒng)" % >
    < %@ page import="java.rmi.*" % >
    < %@ page import="javax.naming.*" % >
    < %@ page import="javax.rmi.PortableRemoteObject" % >
    < %@ page import="securitybeans.*" % >

    < HTML >
    < HEAD >
    < TITLE >EJB示例:數(shù)據(jù)加密、解密演示系統(tǒng)< /TITLE >
    < /HEAD >
    < %
    SecurityHome shMain = null;
    Try
    {
    shMain = ( SecurityHome )PortableRemoteObject.narrow( new InitialContext().lookup( "mysecurity" ), SecurityHome.class );
    }//try
    catch( NamingException ne )
    {
    ne.printStackTrace();
    }//catch
    Security security = shMain.create();
    % >
    < BODY BACKGROUND="bg.gif" >
    < CENTER >
    < H1 >數(shù)據(jù)加密解密演示系統(tǒng)< IMG SRC="duke.gif" >< /H1 >< BR >< BR >< BR >
    < TABLE WIDTH="700" HEIGHT="300" BORDER="1" >
    < TR >
    < TD ALIGN="CENTER" >
    < %
    if ( request.getParameter( "SOURCECONTENT" ) != null )
    {
    % >
    加密生成的密文為:< BR >
    < %= security.encrypt( request.getParameter( "SOURCECONTENT" ) ) % >
    < %
    }//if
    % >
    < /TD >
    < TD ALIGN="CENTER" >
    < %
    if ( request.getParameter( "TARGETCONTENT" ) != null )
    {
    % >
    解密生成的明文為:< BR >
    < %= security.encrypt( request.getParameter( "TARGETCONTENT" ) ) % >
    < %
    }//if
    % >
    < /TD >
    < /TR >
    < /TABLE >
    < /CENTER >
    < /BODY >
    < /HTML >


    運(yùn)行第一個(gè)EJB應(yīng)用程序

       一個(gè)完整的EJB應(yīng)用程序已經(jīng)寫(xiě)完了,但是事情還遠(yuǎn)沒(méi)有完結(jié)。要使一個(gè)EJB應(yīng)用程序能夠運(yùn)行,還有很多事情要做。并且,可能這些事情的工作量并不比編程序本身小多少。

    第一步 編譯EJB代碼

       html和JSP代碼是不需編譯的,但securitybeans目錄下的三個(gè).Java文件必須編譯成.class文件才可運(yùn)行。由于三個(gè)Java文件屬于一個(gè)包,所以要進(jìn)行聯(lián)編。

    第二步 啟動(dòng)J2EE服務(wù)器

       打開(kāi)一個(gè)DOS Shell窗口,鍵入j2ee –verbose,稍候片刻,當(dāng)屏幕出現(xiàn)提示“J2EE server startup complete”時(shí),表示j2eesdk自帶的J2EE服務(wù)器啟動(dòng)成功了。

    第三步 打開(kāi)配置工具

       打開(kāi)一個(gè)DOS Shell窗口(如果你現(xiàn)每次打開(kāi)一個(gè)新的DOS Shell窗口麻煩,可以在前一步中鍵入start j2ee –verbose,即可自動(dòng)彈出一個(gè)新的窗口,而原窗口不變),鍵入deploytool,稍候片刻,即可啟動(dòng)j2eesdk自帶的配置工具。Deploytool的啟動(dòng)畫(huà)面如圖三所示。


    圖三 deploytool的啟動(dòng)畫(huà)面

    新建一個(gè)Application


    圖四 新建一個(gè)Application


       點(diǎn)擊deploytool的File菜單->New->Application,在彈出的對(duì)話框中選中SecurityApp所在的目錄,并在Display Name中輸入任意一個(gè)你想在界面上看到的這個(gè)應(yīng)用程序的名稱(chēng)(比如:SecurityApp)。

    第五步 新建一個(gè)EntERPrise Bean

       下面就將進(jìn)入比較關(guān)鍵的部分!

       點(diǎn)擊deploytool的File菜單->New->Enterprise Bean,將彈出一個(gè)New Enterprise Bean Wizard。點(diǎn)擊Next按鈕略過(guò)第一個(gè)界面,在第二個(gè)界面中輸入JAR Display Name為“SecurityJar”,并點(diǎn)擊Edit按鈕,在彈出的對(duì)話框中將securitybeans目錄下的三個(gè).Java編譯后生成的.class文件加入到SecurityJar的內(nèi)容中去,如圖五所示。


    圖五 將.class文件添加到SecurityJar中


       點(diǎn)擊Next到第三個(gè)界面,注意:

    1. 選中Session為Stateless(缺省為Stateful);

    2. 輸入Enterprise Bean Name為SecurityBean;

    3. 選擇Enterprise Bean Class為securitybeans.SecurityBean;

    4. 選擇Remote Home Interface為securitybeans.SecurityHome;

    5. 選擇Remote Interface為securitybeans.Security。

       至此關(guān)鍵的步驟就完成了,以下幾個(gè)界面你大可以放心的“Next”了。至最后一個(gè)界面點(diǎn)擊Finish按鈕,即完成了一個(gè)Enterprise Bean的添加工作。


    新建一個(gè)Web Component

    這個(gè)步驟與上一步驟類(lèi)似


       點(diǎn)擊deploytool的File菜單->New->Web Component,將彈出一個(gè)New Web Component Wizard。點(diǎn)擊Next按鈕略過(guò)第一個(gè)界面,在第二個(gè)界面中輸入WAR Display Name為“SecurityWar”,并點(diǎn)擊Edit按鈕,在彈出的對(duì)話框中將ClientCode目錄下的幾個(gè)客戶(hù)代碼文件加入到SecurityWar的內(nèi)容中去,如圖六所示。


    圖六 將ClientCode目錄下的文件添加到SecurityJar中


       點(diǎn)擊Next進(jìn)入第三個(gè)界面,選擇the type of web component you are creating為JSP。點(diǎn)擊Next進(jìn)入第四個(gè)界面,注意:

    1、 選中JSP FileName為SecurityProcessPage.jsp;

    2、 輸入Web Component Name為SecurityProcessPage。

       兩次點(diǎn)擊Next按鈕進(jìn)入第五個(gè)界面,點(diǎn)擊Add按鈕,給該Web Component添加一個(gè)別名為SecurityAlias。

       至此主要的步驟就完成了,以下幾個(gè)界面只需放心點(diǎn)擊Next按鈕即可,至最后一個(gè)界面,點(diǎn)擊Finish按鈕,即完成了一個(gè)Web Component的添加工作。

    第七步 修改JNDI和RootContext

       添加完了兩個(gè)主要的組件之后,還要修改兩個(gè)配置,才能最后完成EJB的配置。


    圖七 SecurityApp的JNDI Names標(biāo)簽頁(yè)的設(shè)置


       在deploytool主界面左邊的樹(shù)形結(jié)構(gòu)中點(diǎn)擊SecurityApp節(jié)點(diǎn),主界面的右邊就會(huì)顯示出四個(gè)標(biāo)簽頁(yè)。在這四個(gè)標(biāo)簽頁(yè)中,JNDI Names標(biāo)簽頁(yè)需加上mysecurity為JNDI Name,如圖七所示;WebContext標(biāo)簽頁(yè)中需加上SecurityRoot為SecurityWar的ContextRoot,如圖八所示。


    圖八 SecurityApp的Web Context標(biāo)簽頁(yè)的設(shè)置


    第八步 校驗(yàn)J2EE應(yīng)用程序

       完成以上七個(gè)步驟后,整個(gè)EJB的配置工作就基本完成了,下面只需簡(jiǎn)單兩個(gè)步驟就大功告成,不過(guò)也要做好功虧一簣的準(zhǔn)備!

       在deploytool主界面左邊的樹(shù)形結(jié)構(gòu)中點(diǎn)擊SecurityApp節(jié)點(diǎn),再點(diǎn)擊deploytool的Tools菜單->Verifier…菜單項(xiàng),在彈出窗口中點(diǎn)擊OK按鈕,deploytool將自動(dòng)對(duì)EJB應(yīng)用程序進(jìn)行測(cè)試校驗(yàn),檢查有沒(méi)有配置錯(cuò)誤。稍候片刻,如果提示“There were no failed tests.”,則恭喜你大功告成。如果提示有錯(cuò),則需要返回去仔細(xì)重新檢查一步步配置,看看有沒(méi)有地方疏漏了。配置錯(cuò)誤可是很容易出的喲,你要有思想準(zhǔn)備。



    發(fā)布J2EE應(yīng)用程序

       如果通過(guò)了第八步,則第九步就完全是例行公事了。

       點(diǎn)擊deploytool的Tools菜單->Deploy…菜單項(xiàng),會(huì)彈出一個(gè)發(fā)布向?qū)?duì)話框窗口,只管放心點(diǎn)擊Next到最后一個(gè)界面,至最后一個(gè)界面點(diǎn)擊“Finish”按鈕,等待Deployment Progress至最后完成,如圖九所示,就徹底搞定了!


    圖九 發(fā)布完成后的Deployment Progress


    第十步 欣賞程序運(yùn)行效果

       接下來(lái)打開(kāi)一個(gè)瀏覽器窗口,輸入http://localhost:8000/SecurityRoot,就可以欣賞到你第一個(gè)EJB應(yīng)用程序的運(yùn)行效果了。

       第一個(gè)頁(yè)面如圖十所示,顯示的是一個(gè)數(shù)據(jù)錄入頁(yè)面,用戶(hù)可錄入一些想要加密/解密的內(nèi)容,點(diǎn)擊提交按鈕就可到下一個(gè)頁(yè)面。

       第二個(gè)頁(yè)面如圖十一所示,顯示的是對(duì)用戶(hù)請(qǐng)求內(nèi)容的加密/解密處理結(jié)果。


    圖十 運(yùn)行效果第一個(gè)頁(yè)面(加密/解密請(qǐng)求窗)


    圖十一 運(yùn)行效果第二個(gè)頁(yè)面(加密/解密結(jié)果顯示頁(yè))


       萬(wàn)事開(kāi)頭難,有了第一個(gè)EJB應(yīng)用程序運(yùn)行通過(guò)的體驗(yàn),以后就好辦了。希望本文能為你開(kāi)個(gè)好頭!

    posted on 2006-10-23 15:24 jackstudio 閱讀(624) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): javaejb
    主站蜘蛛池模板: 国产亚洲精品自在久久| 最近2019年免费中文字幕高清| 亚洲色偷偷偷综合网| 亚洲日本在线免费观看| 中文字幕亚洲精品| 久久久久亚洲AV无码观看 | 另类免费视频一区二区在线观看| 无码日韩人妻AV一区免费l | 亚洲人成在线播放| 亚洲一区免费视频| 在线a亚洲老鸭窝天堂av高清| 亚洲av无码国产综合专区| 亚洲一区二区三区免费在线观看 | 亚洲成AV人片在线观看| 久久精品国产亚洲AV麻豆~| 亚洲AV无码第一区二区三区 | 亚洲精品成人片在线播放 | 成人黄软件网18免费下载成人黄18免费视频 | 亚洲成在人线在线播放无码| 亚洲国产欧美日韩精品一区二区三区 | 国产精品亚洲片夜色在线| 四虎必出精品亚洲高清| 亚洲精品无码国产片| 无遮挡a级毛片免费看| 中文字幕无线码免费人妻| 中国精品一级毛片免费播放| 久久亚洲免费视频| 成人免费视频网站www| 在线观看免费成人| 亚洲精品美女久久久久99小说| 国内精品久久久久久久亚洲| 亚洲a在线视频视频| 亚洲精品视频在线观看免费| 中日韩亚洲人成无码网站| 亚洲av日韩综合一区久热| 大片免费观看92在线视频线视频| 中文字幕在线免费看线人| 十九岁在线观看免费完整版电影| 无码一区二区三区AV免费| 可以免费观看一级毛片黄a| 亚洲国产日韩在线视频|