JSP與EJB相互作用
以下是一個(gè)snippet代碼,演示了JSP與EJB session bean進(jìn)行相互作用。
- <%@ page import="javax.naming.*, javax.rmi.PortableRemoteObject,
- foo.AccountHome, foo.Account" %>
- <%!
- //declare a "global" reference to an instance of the home
interface of the session bean- AccountHome accHome=null;
- public void jspInit() ...{
- //obtain an instance of the home interface
- InitialContext cntxt = new InitialContext( );
- Object ref= cntxt.lookup("java:comp/env/ejb/AccountEJB");
- accHome = (AccountHome)PortableRemoteObject.narrow
(ref,AccountHome.class);- }
- %>
- <%
- //instantiate the session bean
- Account acct = accHome.create();
- //invoke the remote methods
- acct.doWhatever(...);
- // etc etc...
- %>
在JSP中Java代碼應(yīng)該越少越好。
在以上例子中,JSP設(shè)計(jì)者不得不處理和理解存取EJB的機(jī)理。 代替 在一個(gè)Mediator中對(duì)EJB機(jī)制的壓縮以及將EJB方法作為Mediator的方法,可以在JSP中使用 Mediator。Mediator通常由EJB設(shè)計(jì)者編寫(xiě)。Mediator可以提供附加的值如attribute caching等.
JSP scriptlet代碼必須最小化。如果要在JSP中直接請(qǐng)求EJB可能要在JSP 中寫(xiě)許多代碼,包括try...catch等函數(shù)塊來(lái)進(jìn)行操作。
使用一個(gè)標(biāo)準(zhǔn)的JavaBean作為一個(gè)JSP與EJB服務(wù)器的中介可以減少在JSP中的Java代碼的數(shù)量,并可提高可重用性。這個(gè) JavaBean必須是一個(gè)你所存取的EJB的覆蓋(wrapper)。
如果你使用標(biāo)準(zhǔn)的JavaBean,你可以使用 JSP:useBean標(biāo)記來(lái)初始化EJB參數(shù),如服務(wù)器URL和服務(wù)器
安全參數(shù)等。
自定義標(biāo)記也可以是一種選擇。但是,這要求比一個(gè)簡(jiǎn)單JavaBean wrapper更多的編碼。
該處必須被重新寫(xiě)為盡可能小的代碼并保證JSP腳本內(nèi)容盡可能輕(light)。以上是JSP與EJB相互作用
【編輯推薦】