weblogic ejb3 入门与提高(四)


在Weblogic 10中做EJB3的开发    之基础开发 (3)

---------------------------------------------------------------------------

下面用jsp实现表示层,还是两个,一个是有状态会话Bean的业务,一个是无状态会话Bean的业务。

 文件地址:[WebContext/JavaSource/com/mh/servlet/test/ejb3statefull/AccountMoneyStatelessSV.java]
 包名:[com.mh.servlet.test.ejb3statefull]
 名称:[AccountMoneyStatelessSV]
 内容如下:
 ----------------------------------------------------------------------
 <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage=""%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 <title>测试-使用有状态会话Bean</title>
 </head>
 <script language="javascript" type="text/javascript">

  /**
   * 函数名:  getSysAliasAss
   * 功能描述: 获取运行系统别名(辅助)
   */
  function getSysAliasAss(){
   
   //读取系统当前请求的pathName
   var strPathName = window.location.pathname;
   
   //以字符串"/"分割到数组
   var oAryTmp = strPathName.split("/");
   //系统别名
   var strSysAlias = "/" + oAryTmp[1];
   
   //返回函数值
   return strSysAlias;
   
  }
  
  
  
  /**
   * 函数名: isInitAccount
   * 功能描述: 是否已经初始化
   */
  function isInitAccount(){
  
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=isInitAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strIsInitAccount = xmlHttpReq.responseText;
   
   //返回函数值
   return strIsInitAccount;
  }

 

  /**
   * 函数名: initAccount
   * 功能描述: 初始化账户
   */
  function initAccount(){
  
   //账户是否已经初始化
   var strIsInitAccount = isInitAccount();
   if(strIsInitAccount != null && strIsInitAccount == "yes"){
    alert("账户已经初始化!不能重复初始化!");
    return false;
   }
  
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
     
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=initAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //刷新账户状态
   refreshState();
   
   //返回函数值
   return true;
  }
  
  
  
  /**
   * 函数名: delAccount
   * 功能描述: 删除账户
   */
  function delAccount(){
  
   //账户是否已经初始化
   var strIsInitAccount = isInitAccount();
   if(strIsInitAccount != null && strIsInitAccount == "no"){
    alert("账户还没有初始化!");
    return false;
   }
  
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
     
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=delAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //刷新账户状态
   refreshState();
   
   //返回函数值
   return true;
  }
  
  
  /**
   * 函数名: charge
   * 功能描述: 给账户冲值
   */
  function charge(){
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //获取账户
   var strAccountCharge = accountCharge.value;
   //金额
   var fMoney = chargeMoney.value;
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=charge&account=" + strAccountCharge + "&money=" + fMoney;
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //返回函数值
   return true;
  }
  
  
  
  /**
   * 函数名: pay
   * 功能描述: 账户扣款
   */
  function pay(){
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //获取账户
   var strAccountPay = accountPay.value;
   //金额
   var fMoney = payMoney.value;
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=pay&account=" + strAccountPay + "&money=" + fMoney;
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //返回函数值
   return true;
  }
  
  
  /**
   * 函数名: refreshState
   * 功能描述: 刷新账户状态
   */
  function refreshState(){
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=isInitAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strIsInitAccount = xmlHttpReq.responseText;
   if(strIsInitAccount != null && strIsInitAccount == "no"){
    accountState.innerHTML = "<font color='red'>没有初始化</font>";
   }else if(strIsInitAccount != null && strIsInitAccount == "yes"){
    accountState.innerHTML = "<font color='blue'>激活</font>";
   }
   
   //返回函数值
   return true;
  }
  
  
  
  /**
   * 函数名: account
   * 功能描述: 获取账户余额
   */
  function account(){
  
   //账户是否已经初始化
   var strIsInitAccount = isInitAccount();
   if(strIsInitAccount != null && strIsInitAccount == "no"){
    alert("账户还没有初始化!");
    return false;
   }
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=account";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //返回函数值
   return true;
  }


 </script>

 <body>
 <p>账户管理:<br>
 <hr width="100%" size="1" />
 </p>
 <table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
  <tr>
   <td bgcolor="#FFFFFF">
   <table width="600" border="0" cellspacing="1" cellpadding="0">
    <tr>
     <td height="20" bgcolor="#CCCCCC">有状态会话Bean测试</td>
    </tr>
    <tr>
     <td height="20">
     <hr width="100%" size="1" />
     </td>
    </tr>
    <tr>
      <td height="20">
     <input name="initAccount" type="button" id="initAccount" value="账户初始化" οnclick="initAccount();" />&nbsp;
  <input type="button" name="Submit" value="删除账户A、B" οnclick="delAccount();" />&nbsp;&nbsp;&nbsp;
      账户当前状态:<span id="accountState"></span>
     <input name="refreshState" type="button" id="refreshState" value="刷新" οnclick="refreshState()" />    </td>
    </tr>
    <tr>
     <td height="20">选择一个账户:
       <select name="accountCharge" id="accountCharge">
         <option>选择一个账户</option>
         <option value="A">A</option>
         <option value="B">B</option>
         <option value="ALL">All</option>
          </select>
       冲值金额:
         <input name="chargeMoney" type="text" id="chargeMoney" size="10" /> 元 <input
      name="charge" type="button" id="charge" value="冲值" οnclick="charge();" /></td>
    </tr>
    <tr>
     <td height="20">选择一个账户:
     <select name="accountPay" id="accountPay">
       <option>选择一个账户</option>
       <option value="A">A</option>
       <option value="B">B</option>
       <option value="ALL">All</option>
     </select>
 扣款金额:
 <input name="payMoney" type="text" id="payMoney" size="10" /> 元 <input name="pay"
      type="button" id="pay" value="扣款" οnclick="pay();" /></td>
    </tr>
    <tr>
     <td height="20">
     <input name="account" type="button" id="account" value="账户余额" οnclick="account();" />
     </td>
    </tr>
    <tr>
     <td height="40"><span id="outMessage"></span></td>
    </tr>
   </table>
   </td>
  </tr>
 </table>
 </body>
 </html>
 ----------------------------------------------------------------------
 这个是实现有状态会话Bean。


 文件地址:[WebContext/account_stateless.jsp]
 ----------------------------------------------------------------------
 <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage=""%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 <title>测试-使用无状态会话Bean</title>
 </head>
 <script language="javascript" type="text/javascript">

  /**
   * 函数名:  getSysAliasAss
   * 功能描述: 获取运行系统别名(辅助)
   */
  function getSysAliasAss(){
   
   //读取系统当前请求的pathName
   var strPathName = window.location.pathname;
   
   //以字符串"/"分割到数组
   var oAryTmp = strPathName.split("/");
   //系统别名
   var strSysAlias = "/" + oAryTmp[1];
   
   //返回函数值
   return strSysAlias;
   
  }
  
  
  
  /**
   * 函数名: isInitAccount
   * 功能描述: 是否已经初始化
   */
  function isInitAccount(){
  
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=isInitAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strIsInitAccount = xmlHttpReq.responseText;
   
   //返回函数值
   return strIsInitAccount;
  }

 

  /**
   * 函数名: initAccount
   * 功能描述: 初始化账户
   */
  function initAccount(){
  
   //账户是否已经初始化
   var strIsInitAccount = isInitAccount();
   if(strIsInitAccount != null && strIsInitAccount == "yes"){
    alert("账户已经初始化!不能重复初始化!");
    return false;
   }
  
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
     
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=initAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //刷新账户状态
   refreshState();
   
   //返回函数值
   return true;
  }
  
  
  
  /**
   * 函数名: delAccount
   * 功能描述: 删除账户
   */
  function delAccount(){
  
   //账户是否已经初始化
   var strIsInitAccount = isInitAccount();
   if(strIsInitAccount != null && strIsInitAccount == "no"){
    alert("账户还没有初始化!");
    return false;
   }
  
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
     
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=delAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //刷新账户状态
   refreshState();
   
   //返回函数值
   return true;
  }
  
  
  /**
   * 函数名: charge
   * 功能描述: 给账户冲值
   */
  function charge(){
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //获取账户
   var strAccountCharge = accountCharge.value;
   //金额
   var fMoney = chargeMoney.value;
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=charge&account=" + strAccountCharge + "&money=" + fMoney;
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //返回函数值
   return true;
  }
  
  
  
  /**
   * 函数名: pay
   * 功能描述: 账户扣款
   */
  function pay(){
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //获取账户
   var strAccountPay = accountPay.value;
   //金额
   var fMoney = payMoney.value;
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=pay&account=" + strAccountPay + "&money=" + fMoney;
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //返回函数值
   return true;
  }
  
  
  /**
   * 函数名: refreshState
   * 功能描述: 刷新账户状态
   */
  function refreshState(){
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=isInitAccount";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strIsInitAccount = xmlHttpReq.responseText;
   if(strIsInitAccount != null && strIsInitAccount == "no"){
    accountState.innerHTML = "<font color='red'>没有初始化</font>";
   }else if(strIsInitAccount != null && strIsInitAccount == "yes"){
    accountState.innerHTML = "<font color='blue'>激活</font>";
   }
   
   //返回函数值
   return true;
  }
  
  
  
  /**
   * 函数名: account
   * 功能描述: 获取账户余额
   */
  function account(){
  
   //账户是否已经初始化
   var strIsInitAccount = isInitAccount();
   if(strIsInitAccount != null && strIsInitAccount == "no"){
    alert("账户还没有初始化!");
    return false;
   }
   
   //创建Ajax对象
   var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
   
   //确定请求的Url
   var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=account";
     
   //发出请求
   xmlHttpReq.open("GET", strUrl, false);
   xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;");
   xmlHttpReq.send();
     
   //读取数据
   var strMessage = xmlHttpReq.responseText;
   outMessage.innerHTML = strMessage;
   
   //返回函数值
   return true;
  }


 </script>

 <body>
 <p>账户管理:<br>
 <hr width="100%" size="1" />
 </p>
 <table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
  <tr>
   <td bgcolor="#FFFFFF">
   <table width="600" border="0" cellspacing="1" cellpadding="0">
    <tr>
     <td height="20" bgcolor="#CCCCCC">无状态会话Bean测试</td>
    </tr>
    <tr>
     <td height="20">
     <hr width="100%" size="1" />
     </td>
    </tr>
    <tr>
      <td height="20">
     <input name="initAccount" type="button" id="initAccount" value="账户初始化" οnclick="initAccount();" />&nbsp;
  <input type="button" name="Submit" value="删除账户A、B" οnclick="delAccount();" />&nbsp;&nbsp;&nbsp;
      账户当前状态:<span id="accountState"></span>
     <input name="refreshState" type="button" id="refreshState" value="刷新" οnclick="refreshState()" />    </td>
    </tr>
    <tr>
     <td height="20">选择一个账户:
       <select name="accountCharge" id="accountCharge">
         <option>选择一个账户</option>
         <option value="A">A</option>
         <option value="B">B</option>
         <option value="ALL">All</option>
          </select>
       冲值金额:
         <input name="chargeMoney" type="text" id="chargeMoney" size="10" /> 元 <input
      name="charge" type="button" id="charge" value="冲值" οnclick="charge();" /></td>
    </tr>
    <tr>
     <td height="20">选择一个账户:
     <select name="accountPay" id="accountPay">
       <option>选择一个账户</option>
       <option value="A">A</option>
       <option value="B">B</option>
       <option value="ALL">All</option>
     </select>
 扣款金额:
 <input name="payMoney" type="text" id="payMoney" size="10" /> 元 <input name="pay"
      type="button" id="pay" value="扣款" οnclick="pay();" /></td>
    </tr>
    <tr>
     <td height="20">
     <input name="account" type="button" id="account" value="账户余额" οnclick="account();" />
     </td>
    </tr>
    <tr>
     <td height="40"><span id="outMessage"></span></td>
    </tr>
   </table>
   </td>
  </tr>
 </table>
 </body>
 </html>
 ----------------------------------------------------------------------
 这个是实现无状态会话Bean。

 上面两个表示层使用了Ajx技术,据微软说Ajax是一种老调重谈的技术,但是我很纳闷,为什么以前我一直想要实现这样的效果就从来没有人跟我说呢?!所以,我觉得AJax是一门新技术,而且应该再次基础上发展,它应该是很有潜质的。

 接下来要在欢迎页面[WebContext/index.jsp]中加入下面的部分:
 ----------------------------------------------------------------------
 <p>
 <center>
 EJB3测试:有状态会话Bean与无状态会话Bean的差别<br>
 <a href="<%=request.getContextPath() %>/account.jsp" target="_blank">账户管理:有状态会话Bean实现</a><br>
 <a href="<%=request.getContextPath() %>/account_stateless.jsp" target="_blank">账户管理:无状态会话Bean实现</a>
 </center>
 </p>
 ----------------------------------------------------------------------

 
 最后使用[build.xml]来构建发布程序吧!


 测试效果的时候,你会发现,有状态的两个账户[A、B]的金额是无不关连互不影响的,但是,无状态就会出现,A账户增加减少金额,会反应在A、B上,而且删除账户后,再从新创建账户,账户的金额会反应在新创建的账户上。这就就说明,无状态会话Bean是可以被重复利用,并不会因为一个用户不使用就从容器中删除,而是由容器来合理配置,继续提供给下一个用户使用;而用状态会话Bean它只与一个用户保持关联,每个用户的调用,都是一个新的Bean对象。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值