




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年吉林水利電力職業(yè)學院單招職業(yè)傾向性測試題庫一套
- 2025年廣東省湛江市單招職業(yè)適應性測試題庫含答案
- 疫情背景下網絡直播行業(yè)的機遇與挑戰(zhàn)分析
- 科技創(chuàng)新在商業(yè)決策中的決策支持作用
- 煙臺綠色城市規(guī)劃中教育與文化的作用
- 2025年廣西經貿職業(yè)技術學院單招職業(yè)適應性測試題庫學生專用
- 2025年河北省邯鄲市單招職業(yè)傾向性測試題庫含答案
- 2025年河南職業(yè)技術學院單招職業(yè)技能測試題庫新版
- 2025年嘉興南洋職業(yè)技術學院單招職業(yè)適應性測試題庫及答案1套
- 社交媒體平臺中的網絡編程技術
- 《煤礦頂板管理》課件
- 醫(yī)療器械監(jiān)督管理條例
- 2024年重慶市公務員錄用考試《行測》真題及答案解析
- 2024年PIE工程師培訓教程:敏捷項目管理
- 新能源汽車驅動電機及控制系統(tǒng)檢修課件 學習情境5:電機控制器
- 短視頻內容課件
- 網絡試運行方案
- 高考英語語法考點梳理
- 《護患溝通》課件
- 2024-2025學年新教材高中化學 第三章 鐵 金屬材料 2.1 合金說課稿 新人教版必修1
- 《籃球防守腳步移動技術 滑步》教案
評論
0/150
提交評論