亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Bean和Servlet的企業應用

2019-11-17 06:24:24
字體:
來源:轉載
供稿:網友

  J2EE是一個企業應用程序的開發平臺,包括了對EJB、Servlet、javaServer Page、JNDI、xml等的支持。在這個平臺上可以開發瘦客戶端的多層體系結構的企業應用程序。

  EnterPRise JavaBean技術是J2EE的主要基礎。EJB技術對在分布式的計算環境中執行應用邏輯提供了一個可伸縮的框架結構。J2EE通過將EJB組件結構和其它的企業技術相結合,解決了在Java平臺上進行開發和配置服務端應用程序的無縫結合。

  要使用J2EE開發您的企業應用,您必須要在您的機器上安裝一個Web服務器,還要支持XML。為了在瀏覽器中運行Java 2的API,還要給您的瀏覽器安裝一個支持Java2的插件。

  下面就介紹怎樣用J2EE SDK寫一個包括了Html頁面,Servlet和session Bean的一個簡單的瘦客戶端的多層體系結構的企業應用程序。聽起來是不是心動了呢?下面就開始吧。

還要提醒一點的就是:在編程的時候,適當的增加catch子句是一個很好編程風格。假如例子代碼拋出了一個正確的異常,代碼就被 try/catch這樣的程序結構包圍。Catch子句應該中應該加入處理異常的代碼,千萬不要留成空白。至少,應該加入語句:e.printStackTrace()來在控制臺顯示異常信息。

  J2EE SDK是一個J2EE平臺上用于演示、教育等用途的非商業的東東??梢詮膉avasoft的網站上免費下載。很適合用來學習。假如你沒有出國權限,還可以從國內各高校的FTP服務器上去下載,速度比較快,但可能版本不是最新的。


瘦客戶端的多層體系結構的應用程序的例子:

  本例子通過一個HTML頁面的輸入來調用一個Servlet,Servlet再用Java的名字目錄服務接口(JNDI)APIs來尋找一個會話Session Bean,用這個Session Bean來執行一個計算。當Servlet得到了計算的結果的之后,Servlet把計算結果返回給HTML頁面的用戶。

  之所以說這是一個瘦客戶端的應用程序,是因為Servlet本身并沒有執行任何的應用邏輯。這個簡單的計算是由一個Session Bean在J2EE的應用服務器上執行的??蛻魶]有參與過程的任何操作,所有的計算都是由Session Bean完成的。

  所謂的多層體系結果實際上是由三或者四層組成的。我們的例子實際上是四層的一個結構。三層的體系結構是在標準的兩層的客戶/服務器結構基礎上,將一個多線程的應用服務器加到了非瀏覽器的客戶端和后臺數據庫之間。而四層的體系結構是通過Servlet和JavaServer Pages技術將客戶端的應用程序由瀏覽器和HTML頁面來取代。這個例子我們暫時只用其中的三層,在下一個例子中。我們再去訪問數據庫。這樣,就擴展到四層了。再以后,我們會涉及到JavaServer Pages技術和XML技術。


J2EE軟件的安裝:

  為了使我們的例子能夠運行起來,首先要下載一個Java2 SDK Enterprise Edition(J2EE)的1.2.1的版本和一個J2SE(Java 2 Standard Edition)的1.2以上的版本。在windows 2000系統中,假設我們把J2EE和J2SE都裝到了C:J2EE目錄下。安裝具體目錄如下:

J2EE:C:J2EEj2sdkee1.2.1

J2SE:C:J2EEjdk1.2.2


Path和ClassPath的設置:

  下載的東西包括了J2EE的應用服務器、Cloudscape數據庫、使用了加密套接字協議層的Web服務器、開發和配置的工具、企業級的Java APIs。其Path和ClassPath的設置如下:

Path的設置:在Windows系統中,需要把Path的目錄包含下面兩個目錄:

C:J2EEj2sdkee1.2.1in

C:J2EEjdk1.2.2in

Classpath的設置:在Windows系統中,需要把Classpath參數包含下面的文件:

C:J2EEj2sdkee.1.2.1libj2ee.jar

另外,還要配置環境變量:

J2EE_HOME=C:J2EEj2sdkee1.2.1

JAVA_HOME=C:J2EEjdk1.2.2

  這樣,就可以執行C:J2EEj2sdkee1.2.1in目錄下面的批處理命令了。仔細看看里面的批處理,你會發現不少的東西的。


J2EE應用程序組件:

  J2EE程序員編寫J2EE組件。J2EE組件是一個功能齊全的軟件單元。將其它的應用程序組件組裝到J2EE的應用程序和接口中。J2EE規范中定義如下的應用程序組件:


應用程序客戶組件


Enterprise JavaBean組件


Servlet和JavaServer Pages組件(也叫做Web組件)


Applet

  在本例子中,我們創建了一個J2EE的應用程序和兩個J2EE的組件:一個Servlet和一個Session Bean。Servlet和HTML文件是捆綁在一個WAR(WEB Archive)文件中。Session Bean的類和接口捆綁到了一個JAR文件中。然后再把WAR文件和JAR文件加到J2EE的應用程序,捆綁到一個EAR(Enterprise Archive)文件中。并驗證測試產品環境的配置。

  在這所有的步驟中。實際上執行了很多的不用的角色的功能。編寫Session Bean和Servlet是開發工作。而創建一個J2EE的應用程序,將J2EE組件組裝到應用程序中是應用程序的組裝工作。實際上,這些工作可以在不同的地方由不用的人員來做。


創建一個HTML頁面:

這個頁面名字為bonus.html。HTML代碼如下:

  代碼中,讓人感愛好的是用別名來調用BonusServlet.class。因為在后面提到的應用程序的組裝的時候,將它映射到了這個別名BonusServlet上

<HTML>

<BODY BGCOLOR = "WHITE">

<BLOCKQUOTE>

<H3>Bonus Calculation</H3>

<FORM METHOD="GET" ACTION="BonusAlias">

<P>

Enter social security Number:

<P>

<INPUT TYPE="TEXT" NAME="SOCSEC"></INPUT>

<P>

Enter Multiplier:

<P>

<INPUT TYPE="TEXT" NAME="MULTIPLIER"></INPUT>

<P>

<INPUT TYPE="SUBMIT" VALUE="Submit">

<INPUT TYPE="RESET">

</FORM>

</BLOCKQUOTE>

</BODY>

</HTML>

  這個HTML文件有兩個數據域,用戶可以輸入社會保險號和一個乘數。當用戶單擊了Submit按紐。BonusServlet就得到了終端用戶的數據。然后尋找Session Bean。將用戶數據傳遞給Session Bean。Session Bean計算出獎金,把結果返回給Servlet。Servlet再通過另一個HTML頁面將獎金結果返回給用戶。



創建Servlet:

例子假定BonusServlet.java文件是在C:J2EEClient-Code目錄下面。在運行的時候,Servlet代碼執行如下操作:


獲得用戶數據


查找Session Bean


將用戶數據傳遞給Session Bean


在得到Session Bean的返回結果以后,創建一個HTML頁面將結果返回給客戶。


Servlet代碼如下:

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import javax.naming.*;

import javax.rmi.PortableRemoteObject;

import Beans.*;

public class BonusServlet extends HttpServlet {

CalcHome homecalc;

public void init(ServletConfig config)

throws ServletException{

//Look up home interface

try{

InitialContext ctx = new InitialContext();

Object objref = ctx.lookup("calcs");

homecalc =

(CalcHome)PortableRemoteObject.narrow(

objref,

CalcHome.class);

} catch (Exception NamingException) {

NamingException.printStackTrace();

}

}

public void doGet (HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

String socsec = null;

int multiplier = 0;

double calc = 0.0;

PrintWriter out;

response.setContentType("text/html");

String title = "EJB Example";

out = response.getWriter();

out.println("<HTML><HEAD><TITLE>");

out.println(title);

out.println("</TITLE></HEAD><BODY>");

try{

Calc theCalculation;

//Get Multiplier and Social Security Information

String strMult =

request.getParameter("MULTIPLIER");

Integer integerMult = new Integer(strMult);

multiplier = integerMult.intValue();

socsec = request.getParameter("SOCSEC");

//Calculate bonus.10 AUGUST 28, 2000

double bonus = 100.00;

theCalculation = homecalc.create();

calc =

theCalculation.calcBonus(multiplier, bonus);

} catch(Exception CreateException){

CreateException.printStackTrace();

}

//Display Data

out.println("<H1>Bonus Calculation</H1>");

out.println("<P>Soc Sec: " + socsec + "<P>");

out.println("<P>Multiplier: " +

multiplier + "<P>");

out.println("<P>Bonus Amount: " + calc + "<P>");

out.println("</BODY></HTML>");

out.close();

}

public void destroy() {

System.out.println("Destroy");

}

}


  在import子句中,javax.servlet包括了Servlet Class的協議。Java.io是系統輸入輸出包。Javax.naming里面包含了Java名字目錄服務APIs。Javax.rmi是用來Session Bean的home接口和Remote對象的通信使用的。

  在BonusServlet.init方法中,查找Session Bean的home接口。并且產生它的實例。方法使用了JNDI在組件的組裝中的指定的名字calcs。用它來得到home接口的reference。然后就把這個reference和home接口類傳遞給PortableRemoteObject.narrow方法。來保證把reference轉化為CalcHome類型。

  DoGet()方法有兩個參數。一個是request對象,另一個是reponse對象。瀏覽器發送一個request對象給Servlet。而Servlet返回一個response對象給瀏覽器。方法訪問request對象里面的信息,可以發現是誰在發出的請求、請求的數據在什么表單里面、是哪個HTTP頭被發送。并使用reponse對象產生一個HTML頁面來響應瀏覽器的請求。

  當方法處理請求的時候,假如產生輸入輸出錯誤,就拋出一個IOException異常。假如不能處理請求,就會拋出一個ServletException異常。為了計算獎金值,doGet()創建了一個home接口,調用它的calcBonus。


創建Session Bean:

  Session Bean代表了與客戶的一個短暫的會話。假如服務或者客戶有一方崩潰了。數據就消失了。相反,Entity Bean代表了數據庫中一段持久的數據。假如服務或者客戶又一方崩潰了,底層的服務保證數據能被保存下來。

  因為這個Enterprise Bean只是應BonusServlet的請求,執行了一個簡單的計算。假如發生崩潰,可以重新初始化計算。這樣,我們在本例子中就選擇Session Bean來實現這個計算。

 在組裝配置好以后,Servlet組件和Session Bean組件如何在一個J2EE應用程序中協同工作。容器是Session Bean和支持Session Bean的底層平臺之間的接口。容器是在配置期間產生的。

  本例子假定CalcBean.java、Calc.java和CalcHome.java文件都放在C:J2EEBeans目錄下面。CalcHome.java文件前面的Package名字 Beans和目錄Beans的名字應該是一樣的。當這些文件被編譯的時候,是從Beans目錄中編譯,其名字是包的名字后面加一個斜線在加上類或者接口的名字。


 

CalcHome.java文件:

package Beans;

import java.rmi.RemoteException;

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

public interface CalcHome extends EJBHome {

Calc create() throws CreateException, RemoteException;

}

  BonusServlet并不直接同Session Bean通信。而是通過產生一個CalcHome的實例。這個Home接口擴展了EJBHome接口。有一個Create()方法,用來在容器中產生一個Session Bean。假如無法產生Session Bean,將會拋出一個CreateException異常。假如不能與Session Bean的遠程方法通信,就會拋出一個RemoteException異常。


Calc.java文件:

package Beans;

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

public interface Calc extends EJBObject {

public double calcBonus(int multiplier,

double bonus)

throws RemoteException;

}

  產生一個Home接口以后,J2EE應用程序就創建一個Remote接口和一個Session Bean。Remote接口擴展了EJBObject接口。并且聲明了一個calcBonus()方法來計算獎金值。方法需要拋出javax.rmi.RemoteException異常。方法的實現在CalcBean類里面。


CalcBean.java文件:

package Beans;

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class CalcBean implements SessionBean {

public double calcBonus(int multiplier,

double bonus) {

double calc = (multiplier*bonus);

return calc;

}

public void ejbCreate() { }

public void setSessionContext(

SessionContext ctx) { }

public void ejbRemove() { }

public void ejbActivate() { }

public void ejbPassivate() { }

public void ejbLoad() { }

public void ejbStore() { }

}

  本Session Bean類實現了SessionBean接口,提供了CalcBonus()方法的行為。在BonusServlet調用CalcHome的Create()方法以后,依次調用setSessionContext()方法和ejbCreate()方法。

  這些空的方法是從SessionBean中來的。由容器負責調用。除非在Bean的創建或者刪除里面,你需要附加一些你自己的操作。否者,你并不需要提供這些方法的行為。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品99久久久久久人| 久久在线免费视频| 国产精品三级美女白浆呻吟| 午夜精品久久久久久久99黑人| 尤物九九久久国产精品的特点| 国产精品自产拍在线观| 午夜精品国产精品大乳美女| 精品久久久久久中文字幕一区奶水| 亚洲精品国产精品国自产观看浪潮| 尤物精品国产第一福利三区| 欧美超级免费视 在线| 欧美亚洲在线播放| 亚洲欧美激情精品一区二区| 色妞一区二区三区| 国产精品入口免费视频一| 国产精品久久久久久影视| 538国产精品一区二区在线| 在线观看91久久久久久| 精品亚洲夜色av98在线观看| 亚洲国产精品女人久久久| 91精品国产色综合| 搡老女人一区二区三区视频tv| 国产精品a久久久久久| 欧美日韩一区二区三区在线免费观看| 国自产精品手机在线观看视频| 欧美裸体xxxx极品少妇软件| 91在线观看欧美日韩| 欧美极品少妇xxxxⅹ喷水| 日韩中文字幕久久| 国产精品丝袜白浆摸在线| 午夜精品久久久久久久久久久久| 国内精品视频久久| 一区国产精品视频| 欧美精品成人91久久久久久久| 国产日本欧美一区二区三区在线| 性色av一区二区三区| 国产一区二区三区在线观看网站| 欧美日韩成人在线观看| 国产精品久久在线观看| 欧美香蕉大胸在线视频观看| 欧美一区二粉嫩精品国产一线天| 欧美激情中文字幕在线| 在线观看国产精品淫| 日韩av在线网| 亚洲护士老师的毛茸茸最新章节| 国产免费久久av| 成人午夜激情网| 国产成人97精品免费看片| 日韩国产精品亚洲а∨天堂免| 久久好看免费视频| 欧美激情网站在线观看| 中文字幕亚洲在线| 成人有码视频在线播放| 91人人爽人人爽人人精88v| 麻豆一区二区在线观看| 国自产精品手机在线观看视频| 亚洲天堂影视av| 911国产网站尤物在线观看| 97在线看免费观看视频在线观看| 欧美乱人伦中文字幕在线| 国产欧美在线视频| 日韩成人中文字幕| 国产精品9999| 2019中文在线观看| 欧美性猛交xxxx久久久| 久久97久久97精品免视看| 国产一区二区三区视频免费| 国产999在线观看| 中文字幕欧美专区| 欧美日韩视频在线| 精品国产一区二区三区久久久狼| 欧美精品在线免费播放| 中文字幕国产日韩| 亚洲男人天堂网| 欧美激情videoshd| 成人在线观看视频网站| 欧美性资源免费| 欧美视频中文字幕在线| 国产精品免费网站| 久久精品色欧美aⅴ一区二区| 亚洲区一区二区| 黑人巨大精品欧美一区二区免费| 91爱爱小视频k| 日韩精品极品在线观看| 欧美激情高清视频| 亚洲美女福利视频网站| 国产精品久久久久久搜索| 色综合久综合久久综合久鬼88| 久久精品99久久久久久久久| 日韩精品一区二区三区第95| 91av在线国产| 美女性感视频久久久| 欧美激情一级二级| 欧美夫妻性生活视频| 中文字幕亚洲情99在线| 91av在线国产| 亚洲一区二区三区在线免费观看| 国产一区在线播放| 国产欧美一区二区三区在线| www.日韩欧美| 亚洲欧洲第一视频| 亚洲另类图片色| 精品久久久久人成| 一区二区三区在线播放欧美| www日韩中文字幕在线看| 欧美日韩亚洲视频一区| 亚洲欧美日韩中文视频| 欧美亚洲另类在线| 国产日韩欧美电影在线观看| 日韩经典中文字幕在线观看| 精品动漫一区二区三区| 国产成人综合精品在线| 日韩av免费看网站| 国产成人av在线播放| 亚洲激情免费观看| 午夜精品视频网站| 日本a级片电影一区二区| 亚洲www在线观看| 久久国产精品免费视频| 久久久久久久久久久久久久久久久久av| 欧美另类xxx| 日韩在线免费高清视频| 日韩中文字幕精品视频| 国产999精品久久久影片官网| 色综合男人天堂| 欧美在线视频网站| 欧美激情一区二区三区成人| 中文字幕亚洲综合久久筱田步美| 亚洲国产精品yw在线观看| 日韩毛片在线观看| 亚洲无限乱码一二三四麻| 国产精品久久久久久五月尺| 国产亚洲精品美女| 4444欧美成人kkkk| 欧美中文字幕在线| 国产精品海角社区在线观看| 欧美黑人巨大xxx极品| 亚洲国产精品久久| 欧美电影免费观看| 992tv成人免费影院| 欧美插天视频在线播放| 国产精品久久久久久亚洲影视| 午夜精品久久久久久久白皮肤| 日韩成人网免费视频| 欧美亚洲一级片| 亚洲欧美精品中文字幕在线| 精品久久久91| 国模极品一区二区三区| 欧美一级黄色网| 亚洲精品日韩激情在线电影| 欧美日韩成人在线播放| 欧美极品在线视频| 日韩美女写真福利在线观看| 久久免费精品日本久久中文字幕| 日韩在线不卡视频| 欧美黑人性猛交| 国产精品自产拍高潮在线观看| 国产香蕉精品视频一区二区三区| 国产日产久久高清欧美一区| 亚洲第一天堂av| 日韩视频免费观看| 国产啪精品视频网站| 中文字幕欧美国内| 久久免费精品日本久久中文字幕|