J2EE與中間件技術-J2EE應用_第1頁
J2EE與中間件技術-J2EE應用_第2頁
J2EE與中間件技術-J2EE應用_第3頁
J2EE與中間件技術-J2EE應用_第4頁
J2EE與中間件技術-J2EE應用_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、J2EE與中間件技術,J2EE應用,Servlet/JSP+EJB,MVC,JSP+Servlet+EJB,Servlet作為EJB的客戶端,訪問EJB Servlet:服務器端的Java代碼,用于響應客戶機的請求,由Servlet容器進行管理 首先: Servlet容器調用Servlet的init()方法,對Servlet進行初始化(獲取Home對象和EJB對象的引用) 然后: Servlet容器自動的調用Servlet中的某個適當的方法處理該請求(doGet()方法:調用EJB遠程方法,adder.jsp,瀏覽器客戶端:輸入一個數字,提交給AdderServlet,adder.jsp,In

2、itial Page for AdderServlet Please enter an integer:,AdderServlet.java,調用Stateful Session Bean的業(yè)務方法 Session Bean:把用戶提交的數字加到它的狀態(tài)變量中 把業(yè)務方法的返回值返回給瀏覽器客戶端,AdderServlet,public class AdderServlet extends HttpServlet Adder adder; public void init() throws ServletException public void doGet (HttpServletReque

3、st req, HttpServletResponse res) throws ServletException, IOException,init(,try InitialContext ic = new InitialContext(); Object objref = ic.lookup(Adder); AdderHome home = (AdderHome)PortableRemoteObject.narrow(objref, AdderHome.class); adder = home.create(0); catch(Exception e) e.printStackTrace()

4、;,doGet(,String inputString = req.getParameter(inputString); Integer inputNumber = new Integer(inputString); adder.add(inputNValue(); /調用Session Bean的業(yè)務方法 int total = adder.getTotal(); res.setContentType(text/html); PrintWriter out = res.getWriter(); generatePage(out,total,private void gene

5、ratePage(PrintWriter out, int total) out.println(); out.println(); out.println(Input for AdderServlet); out.println(); out.println(); out.println(The running total is: + String.valueOf(total); out.println(); out.println(); out.println(Please enter an integer:); out.println(); out.println(); out.prin

6、tln(); out.println(); out.println(); out.println();,generatePage(,返回,Session Bean,AdderEJB Local 接口AdderLocal Local Home接口AdderLocalHome Bean類AdderBean,Remote接口,客戶端采用Remote接口來調用Enterprise Bean: Stub、Skeleton、網絡、參數整理/再整理 生成Bean是非常慢的、效率不高,Local 接口,快速、高效 客戶端是運行在同一個EJB容器中的其他Enterprise Bean:采用Local接口來調用E

7、nterprise Bean 沒有Stub、Skeleton代理,以更快的方式生成Bean,Local接口和LocalHome接口,Local接口擴展javax.ejb.EJBLocalObject接口,不拋出遠程異常 LocalHome接口擴展javax.ejb.EJBLocalHome接口,不拋出遠程異常,Local接口,import javax.ejb. EJBLocalObject; /import java.rmi.RemoteException; public interface Adder extends EJBLocalObject void add(int number);

8、int getTotal();,LocalHome接口,import java.io.Serializable; /import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBLocalHome; public interface AdderHome extends EJBLocalHome Adder create() throws CreateException; Adder create(int initial) throws CreateException;,Bean類,i

9、mport javax.ejb.*; public class AdderBean implements SessionBean int total; public void ejbCreate() total = 0; public void ejbCreate(int initial) total = initial; public void add(int number) total += number; public int getTotal() return total; public AdderBean() public void setSessionContext(Session

10、Context sc) public void ejbRemove() public void ejbActivate() public void ejbPassivate(),web.xml,AdderAlias AdderServlet AdderAlias /AdderAlias,ejb-jar.xml,AdderEJB AdderHome Adder AdderBean Stateful Container,weblogic-ejb-jar.xml,AdderEJB Adder,J2EE Application,.EAR *.WAR *.JAR META-INF,Adder_web.W

11、AR,Web build.xml adder.jsp WEB-INF classes AdderServlet.class AdderLocal.class AdderLocalHome.class web.xml,Adder_ejb.JAR文件,Ejb build.xml AdderLocal.class AdderLocalHome.class AdderBean.class META-INF ejb-jar.xml weblogic-ejb-jar.xml,EAR文件,Adder_web.WAR Adder_ejb.JAR application.xml build.xml,applic

12、ation.xml,AdderApp Adder Application Adder_web.war Adder Adder_ejb.jar,build.xml,build.xml (cont.,運行,ant http:/localhost:7001/Adder/adder.jsp,JSP+Java Bean+Entity Bean,不直接在JSP頁面中使用EJB,而是使用Java Bean作為Enterprise Bean的代理: 盡可能在JSP頁面中減少代碼; Java Bean負責調用EJB,將返回結果保存在屬性當中; JSP使用獲取屬性,并顯示出來,Account.jsp,Accoun

13、t.jsp,客戶在JSP頁面輸入賬戶信息(id, firstname, lastname, balance) 選擇要進行的操作(create, find, debit, credit) 輸入Debit/Credit操作需要的amount JSP頁面?zhèn)鬟f參數到Java Bean,并將返回值顯示出來,Account.jsp,/將Form中所有參數的值傳給accountBean同名的屬性值 String status; status = accountBcessRequest();,Account.jsp(cont.,Account ID Balance First Name Last

14、 Name,Account.jsp(cont.,Action : Create Find Debit Credit Amount Status : status,Java Bean,AccountJavaBean.java 屬性 action, id, firstname, lastname, balance, amount get/set方法 processRequest()方法 根據傳入的參數作相應處理,構造器,Entity Bean對象的初始化位于構造器中: Context ic = new InitialContext(); java.lang.Object objref = ic.l

15、ookup(“EJB); home = (Home) PortableRemoteObject.narrow(objref, Home.class,AccountJavaBean(,public AccountJavaBean() try Context ic = new InitialContext(); java.lang.Object objref = ic.lookup(AccountJSPEJB); accountHome = (AccountHome) PortableRemoteObject.narrow(objref, accountHome.class); catch (Ex

16、ception re) re.printStackTrace(); reset(); /設定各屬性值,reset(,private void reset() System.out.println(Calling reset(); final String emptyString = ; final double zero = 0.0; setAction(emptyString); setId(emptyString); setFirstName(emptyString); setLastName(emptyString); setBalance(zero); setAmount(zero);

17、,get/set方法,public String getAction() return action; public void setAction(String a) action = a; public String getId() return id; public void setId(String i) id = i; public String getFirstName() return firstName; public void setFirstName(String f) firstName = f; public String getLastName() return las

18、tName; public void setLastName(String l) lastName = l; public double getBalance() return balance; public void setBalance(double b) balance = b; public double getAmount() return amount; public void setAmount(double a) amount = a;,processRequest()方法,負責調用Entity Bean的方法: create, find, debit, credit,publ

19、ic String processRequest() String message = ; try if( action.equals(create) ) account = accountHome.create(id, firstName, lastName, balance); message = Created account + id + ; else if( action.equals(debit) ) account = accountHome.findByPrimaryKey(id); account.debit(amount); loadFromEJB(); message =

20、 Debited account + id + by $ + amount; else if( action.equals(credit) ) account = accountHome.findByPrimaryKey(id); account.credit(amount); loadFromEJB(); message = Credited account + id + by $ + amount; else if( action.equals(find) ) account = accountHome.findByPrimaryKey(id); loadFromEJB(); messag

21、e = Found account + id; catch (Exception e) message = e.toString(); return message;,loadFromEJB(,private void loadFromEJB() try setFirstName(account.getFirstName(); setLastName(account.getLastName(); setBalance(account.getBalance(); catch (Exception re) re.printStackTrace();,toString()方法,public Stri

22、ng toString() StringBuffer output = new StringBuffer(); output.append(Action : + action); output.append( Id : + id); output.append( first name : + firstName); output.append( last name : + lastName); output.append( balance : + balance); output.append( amount : + amount); return output.toString();,數據庫

23、表Account1,創(chuàng)建數據庫表: create table account1 (id varchar(3) constraint pk_account primary key, firstname varchar(24), lastname varchar(24), balance DOUBLE PRECISION,BMP Entity Bean,遠程接口Account debit(double amount) credit(double amount) getFirstName() getLastName() getBalance(,BMP Entity Bean,Home接口AccountHome create(String id, String firstName, String lastName, double balance) findByPrimaryKey(String id,BMP Entity Bean,Bean類 AccountBean setEntityContext(EntityContext context) unsetEntityContext(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論