1、实验五 JNDI及会话Bean实验五 JNDI及会话Bean实验内容学习JNDI的概念及使用学习会话Bean的编写、部署及调用学习JBoss的配置实验目的了解JNDI使用方法掌握会话Bean的编写、部署及调用方法掌握有状态Session Bean与无状态Session Bean的区别环境要求服务器:JBoss6.0以上集成开发环境:myEclipse 8.5 或更高实验指导1、在Eclipse中配置JBoss1) 下载JBoss-6.0.0.CR1,并解压;2) 添加环境变量“JBoSS_HOME”为JBoss的安装目录3) 启动myEclipse,在下方的“Server”选项卡中点击右键,在
2、快捷菜单中选择“Configuer Server Connector”,打开如下对话框:4) 在左侧列表中选择“Servers”列表中的“JBoss”-“JBoss v6.x”,然后在右侧面板中的“JBoss server”中选择“Enable”,并在“JBoss home directory”中指明你JBoss的安装目录。然后点击“ok”按钮。2、JNDI的使用1) 在JBoss下绑定将资源绑定到JNDI。i. 创建一个“Web Project”工程名为“jndi”。ii. 创建一个JSP页面“index.jsp”,并编写如下内容:iii. 将此工程发布到JBoss上,然后启动JBoss。i
3、v. 打开另一个浏览器窗口,访问一次刚发布的jdni的index.jsp页面,若看到“绑定成功. ”,表示JNDI名已经绑定成功。2) 通过JNDI查询并引用绑定对象i. 创建一个“Java project”工程,工程名为“jndiClient”。ii. 在工程名上点击右键,在弹出的快捷菜单中选择“Build Path”-“Configure Bulid Path”,弹出如下对话框:点击“Add External JARS.”按钮,将JBoss安装目录中“client”目录中的所有Jar文件添加(jndi的客户端类库)。iii. 添加一个类“Client”,代码如下:iv. 运行上面代码,应该
4、看到如图窗口:3、编写会话Bean1) 无状态会话Beani. 创建一个“EJB Project”工程“MyEJB”,界面如下图。取消“Add Support for Entity beans”的选择,然后点击“Finish”按钮。ii. 创建一个包:“cn.bean”用于保存EJB的类和其对应的接口文件。iii. 创建一个叫SayHi的“EJB3 Session Bean”,如下图:选中“Create Interface”的“Local”和“Remote”,即为此类创建远程接口和本地接口,对应类文件为:SayHiLocal.java和SayHiRemote.java。“Session Typ
5、e”(会话类型):Stateless(无状态会话Bean)。iv. 两个接口内容如下:v. 编写会话类:SayHi,并实现以上两个接口。其内容如下:vi. 部署EJB:在前面创建的JBoss Server的图标上点击右键,在弹出的快捷菜单中选择“Add Deployment.”,弹出对话框如下图:在“Project”中选择当前工程“MyEJB”。vii. 启动JBoss。2) 编写远程客户端 i. 创建一个“Java Project”工程,名为“EJBClient”。ii. 编辑“Build Path”将JBoss目录中Client中的所有的JAR包添加到工程的类路径上。iii. 编辑“Bui
6、ld Path”,在“Projects”选项卡中将“MyEJB”工程添加的列表(如图),或复制上面EJB工程中的远程接口文件SayHIRemote包括整个包,到本工程中。3) 创建一个类Client,代码如下: 2)有状态会话Bean(1)编写一个有状态会话Bean完成购物车的功能。新建一个名叫“CartBean”的EJB3 Session Bean,对话框如下:CartBean类的代码如下:package cn.bean;import java.util.ArrayList;import java.util.HashMap;import javax.ejb.Stateful;Stateful
7、(mappedName=cart)/指明JNDI名为cartpublic class CartBean implements CartBeanLocal, CartBeanRemote /商品信息列表,信息包括:gdID(编号),name(商品名),price(单价),number(购买数量) private ArrayListHashMap goodsList = new ArrayListHashMap(); /添加商品 public void add(HashMap goods) boolean found = false; for(HashMap gd:goodsList) if(gd
8、.get(gdID).toString().equals(goods.get(gdID).toString() int num = (Integer) gd.get(number); gd.put(number, num + 1); found = true; break; if(!found) goods.put(number, 1); goodsList.add(goods); /删除商品 public void delete(String gdID) for(HashMap gd:goodsList) if(gd.get(gdID).toString().equals(gdID) goo
9、dsList.remove(gd); break; /清空购物车 public void clearCart() goodsList.clear(); /获得商品清单 public ArrayListHashMap getGoodsList() return goodsList; 两个接口的代码:Localpublic interface CartBeanLocal public void add(HashMap goods); public void delete(String gdID); public void clearCart(); public ArrayListHashMap g
10、etGoodsList();Remotepublic interface CartBeanRemote public void add(HashMap goods); public void delete(String gdID); public void clearCart(); public ArrayListHashMap getGoodsList();(2)创建一个Web工程作为CartBean的客户端。创建一个名为“cart”的Web工程,复制上边EJB3工程的中的本地接口文件(CartBeanLocal)包括包名到本工程中。创建几个JSP页面完成商品的购买(放入购物车)、查看购物车
11、、清除购物车的功能。index.jsp:功能显示商品列表及添加到购物车的链接,代码如下: My JSP index.jsp starting page % /下面代码模拟生成商品列表,各位可以通过数据库获取 ArrayListHashMap gds; gds = (ArrayListHashMap)session.getAttribute(gds); if(gds = null) gds = new ArrayListHashMap(); HashMap tmp = new HashMap(); tmp.put(gdID,sp0001); tmp.put(name,新编大学英语教程); tmp
12、.put(price,23.5); gds.add(tmp); tmp = new HashMap(); tmp.put(gdID,sp0002); tmp.put(name,J2EE权威指南); tmp.put(price,63.5); gds.add(tmp); tmp = new HashMap(); tmp.put(gdID,sp0003); tmp.put(name,太阳泪); tmp.put(price,21.5); gds.add(tmp); tmp = new HashMap(); tmp.put(gdID,sp0004); tmp.put(name,新编大学文化教程); tm
13、p.put(price,28.5); gds.add(tmp); session.setAttribute(gds,gds); % 商品列表 商品编号 商品名称 单价 操作 $gd.gdID $gd.name $gd.price 添加到购物车 查看购物车 add.jsp: 将指定商品添加到购物车% CartBeanLocal cart; cart = (CartBeanLocal)session.getAttribute(cart); if(cart = null) InitialContext ctx = new InitialContext(); cart = (CartBeanLocal
14、) ctx.lookup(CartBean/local); session.setAttribute(cart,cart); String gid = request.getParameter(gdID); ArrayListHashMap gds = (ArrayListHashMap)session.getAttribute(gds); for(HashMap gd:gds) if(gd.get(gdID).equals(gid) cart.add(gd); response.sendRedirect(index.jsp);%cart.jsp: 显示购物车中的商品列表 Insert tit
15、le here % try CartBeanLocal cart; Object cartTmp = session.getAttribute(cart); if(cartTmp = null) InitialContext ctx = new InitialContext(); cart = (CartBeanLocal) ctx.lookup(CartBean/local); session.setAttribute(cart,cart); else cart = (CartBeanLocal)cartTmp; ArrayListHashMap goodsList = cart.getGo
16、odsList(); pageContext.setAttribute(gdlist,goodsList); catch (NamingException e) out.println(e.getMessage(); % 商品列表 商品编号 商品名称 单价 数量 $gd.gdID $gd.name $gd.price $gd.number 清空购物车clearCart.jsp:清空购物车(3)部署使用前面的无状态会话Bean的部署方法,在MyEclipse中直接部署本部分内容可能会不能正常运行,在此必须脱离MyEclipse将两个工程直接部署到独立的JBoss服务器中。第一步:将两个工程导出a
17、、导出EJB工程。在工程列表中的MyEJB工程上点击右键,在弹出的快捷菜单中选择“”,弹出如下对话框:选择导出目标为“Java”-“JAR file”,点击“Next”按钮,显示如下:所有选择使用默认值,在“JAR file”中指明导出JAR文件的路径;点击“Finish”按钮,完成导出。b、导出Web工程同EJB工程,在工程名上点击右键,在快捷菜单中选择“Export.”,在弹出的对话框中选择目标为:“Java EE”-“WAR file(MyEclipse)”,点击“Next”按钮,显示如下:在“WAR file”中指明要导出的目标位置,点击“Finish”按钮完成导出。第二步:启动JBo
18、ss并进行部署执行JBoss的安装目录中bin目录下的run.bat,启动JBoss。在浏览器的地址栏中输入:localhost:8080,得到如下界面:点击“Administration Console”进入JBoss管理系统的登录界面,如图Username和Password均为“admin”,登录进入管理界面如下图:在左侧的栏目中选择“Applications”-“EJB3 JARS”,部署EJB工程MyEJB.jar,界面如图:点击“Add a new resource”,得到如下界面:点击“浏览.”选择上面导出的EJB工程的jar文件,然点击“Continue”按钮完成部署。成功后可看到下图:看到列表中出现了“MyEJB.jar”表示部署成功。然后点击“Applications”中的“Web Application (WAR)s”,看到如下图,进行Web工程的部署;点击“Add a new resource”按钮,得到和部署EJB时相似的界面,选择要部署的Web工程的导出文件cart.war,并点击“Continue”按钮完成部署,最后看到如下图:表示部署成功。第三部:测试在浏览器地址栏中输入:localhost:8080/cart4、扩展1、为Web工程cart添加删除购物车中指定商品的功能。2、将MyEJB和cart工程部署到两台服务器上。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1