CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

高分挑战高手:jsp访问ejb

楼主abckid9(abckid9)2006-03-20 09:24:30 在 Java / J2EE / EJB / JMS 提问

开发环境为:winxp   +   eclipse   +   tomcat5.x   +   jboss3.2   +   lomboz  
   
  想要实现的功能为:  
                          在页面上输入一个email,提交后在同一页面返回给用户一行字符串  
                          为原email+“is   an   apple”.例如,输入“ab@cd.com”,返回  
                          “ab@cd.com   is   an   apple”  
   
  已经实现的功能为:  
                          利用eclipse   +   jboss3.2   +   lomboz,已经开发好ejb的部分,包括  
                          bean,home等内容,并且可以用lomboz的lomboz   ejb   client   test    
                          wizard开发的带有main()的.java客户端测试成功  
   
  尚未解决的问题:  
                          如何自己新建一个工程,用页面jsp程序访问已实现的ejb。在页面  
                          上输入一个email,提交后在同一页面返回给用户一行字符串  
                            为原email+“is   an   apple”.  
   
   
  请高人指点,最好给出web客户端的代码,为方便,以下给出ejb所在工程的内容  
   
  工程:J2EE_test  
  包:ml  
  文件:MLAdmin.java,MLAdminBean.java,MLAdminHome.java,MLAdminLocal.java  
              MLAdminLocalHome.java,MLAdminSession.java,MLAdminUtil.java  
   
              其中MLAdminBean.java为ejb具体实现内容,方法为:  
              public   String   getName(String   email){    
                      return   email+"   is   a   apple";    
              }  
   
  以上程序是参考《精通eclipse》实现的,但该书没有写用lomboz生成ejb后,如何用jsp的web  
  访问。  
   
  请高手帮忙,希望给出web客户端的代码,解决立即给分。 问题点数:100、回复次数:31Top

1 楼diy8187(雞狗豬驢)回复于 2006-03-20 10:03:39 得分 10

友情UP.Top

2 楼wmzsl(王明哲)回复于 2006-03-20 10:11:22 得分 0

没有这么访问的,jsp直接访问ejb虽然完全可以访问,但是层次太差!  
   
  你写一个servicelocator,然后在jsp去调用就好了!Top

3 楼ibiswang(神鸟)回复于 2006-03-20 10:18:10 得分 30

1.在你的web.xml中加入如下内容:  
      <ejb-ref>  
          <ejb-ref-name>ml/MLAdminHome</ejb-ref-name>  
          <ejb-ref-type>Session</ejb-ref-type>  
          <home>ml.MLAdminHome</home>  
          <remote>ml.MLAdmin</remote>  
      </ejb-ref>  
   
  2.在你的jboss-web.xml中加入如下内容:  
   
          <ejb-ref>  
                  <ejb-ref-name>ml.MLAdminHome</ejb-ref-name>  
                  <jndi-name>MLAdmin</jndi-name>  
          </ejb-ref>  
   
  3.   将ejb相关的home接口类与运行接口类(例如,你的util   class)以jar的方式放在WEB-INF/lib目标下  
   
  4.   在jsp中按下代码进行:  
   
            Context   ejbContext   =   new   InitialContext();  
            MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   ml.MLAdminHome);  
   
            MLAdmin   mlAdmin   =   (MLAdmin)adminHome.create();  
             
   
            return     mlAdmin.getName("a@a.net");  
  Top

4 楼abckid9(abckid9)回复于 2006-03-20 10:27:11 得分 0

谢谢各位,请问楼上  
   
  2中的jboss-web.xml是哪个文件夹下的?我用的是jboss3.2.8sp1,里面有很多jboss-web.xml  
   
  3应该怎么做呢?Top

5 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2006-03-20 10:49:53 得分 0

jboss-web.xml跟部署文件ejb-jar.xml在同一个文件夹  
   
  打包成JAR,jar   -cvf   test.jar   *.class  
  eclipse可以直接打包吧Top

6 楼abckid9(abckid9)回复于 2006-03-20 11:10:02 得分 0

我的jsp代码为:  
   
  <%@   page   language="java"   %>  
  <%@   page   import="ml.MLAdmin"   %>  
  <%@   page   import="javax.naming.InitialContext"   %>  
   
  <!DOCTYPE   HTML   PUBLIC   "-//w3c//dtd   html   4.0   transitional//en">  
  <html>  
  <head>  
  <title>Lomboz   JSP</title>  
  </head>  
  <body   bgcolor="#FFFFFF">  
   
      <%   Context   ejbContext   =   new   InitialContext();  
            MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   ml.MLAdminHome);  
            MLAdmin   mlAdmin   =   (MLAdmin)adminHome.create();      
            String   result   =   mlAdmin.getName("a@a.net");  
      %>  
     
  <p>  
  <center>        
  <h3>Emal   info</h3><br>  
  Input   Query   Emal   ID   :   <input   type="text"   name="email"><br><br>  
  <input   type="submit"   value="Go"><br>  
  <font   color="blue">  
   
  <b>Email   Adress:<%=result%></b>  
  </font>  
  </center>  
  </p>  
  </body>  
  </html>  
   
  但是报错:  
  Context   cannot   be   resolved   or   is   not   a   type  
  ml.MLAdminHome   cannot   be   resolved   or   is   not   a   type  
  MLAdminHome   cannot   be   resolved   or   is   not   a   type  
   
   
  不知道是为什么Top

7 楼ibiswang(神鸟)回复于 2006-03-20 11:19:40 得分 0

你没有引入正确的package:  
  import   javax.ejb.*;  
  import   java.rmi.*;  
  import   javax.rmi.*;  
  import   java.util.*;  
  import   javax.naming.*;  
  import   ml.*;Top

8 楼abckid9(abckid9)回复于 2006-03-20 11:28:19 得分 0

谢谢楼上,按你的内容修改后:  
   
  <%@   page   language="java"   %>  
  <%@   page   import="import   javax.ejb.*"   %>  
  <%@   page   import="java.rmi.*"   %>  
  <%@   page   import="java.util.*"   %>  
  <%@   page   import="javax.naming.*"   %>  
  <%@   page   import="ml.*"   %>    
   
   
  <!DOCTYPE   HTML   PUBLIC   "-//w3c//dtd   html   4.0   transitional//en">  
  <html>  
  <head>  
  <title>Lomboz   JSP</title>  
  </head>  
  <body   bgcolor="#FFFFFF">  
   
      <%   Context   ejbContext   =   new   InitialContext();  
            MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   ml.MLAdminHome);  
            MLAdmin   mlAdmin   =   (MLAdmin)adminHome.create();      
            String   result   =   mlAdmin.getName("a@a.net");  
      %>  
     
  <p>  
  <center>        
  <h3>Emal   info</h3><br>  
  Input   Query   Emal   ID   :   <input   type="text"   name="email"><br><br>  
  <input   type="submit"   value="Go"><br>  
  <font   color="blue">  
   
  <b>Email   Adress:<%=result%></b>  
  </font>  
  </center>  
  </p>  
  </body>  
  </html>  
   
  还有3个错误:  
  Syntax   error   on   token   "import",delete   this   token  
  ml.MLAdminHome   cannot   be   resovled  
  PortableRemoteObject   cannot   be   reslolved  
   
  是不是还应该引用什么,或者缺少jar包?  
  我的工程是在eclipse里新建一个tomcat工程而得到的Top

9 楼xxrl(孔曰成仁,孟曰取媳妇-->她太有才了)回复于 2006-03-20 12:43:13 得分 0

upTop

10 楼abckid9(abckid9)回复于 2006-03-20 12:51:53 得分 0

请大家帮忙看一下,我的工程是eclipse建的tomcat工程Top

11 楼saxonkkk(Saxon)回复于 2006-03-20 14:27:35 得分 0

你真的很强,是初学者吗,明明有写错误的,在导入包第一行  
  多了个"import",去掉Top

12 楼abckid9(abckid9)回复于 2006-03-20 15:16:14 得分 0

不好意思,笔误,我现在的代码是:  
   
  <%@   page   language="java"   %>  
  <%@   page   import="javax.ejb.*"   %>  
  <%@   page   import="java.rmi.*"   %>  
  <%@   page   import="java.util.*"   %>  
  <%@   page   import="javax.naming.*"   %>  
  <%@   page   import="ml.*"   %>    
   
   
  <!DOCTYPE   HTML   PUBLIC   "-//w3c//dtd   html   4.0   transitional//en">  
  <html>  
  <head>  
  <title>Lomboz   JSP</title>  
  </head>  
  <body   bgcolor="#FFFFFF">  
   
      <%   Context   ejbContext   =   new   InitialContext();  
            MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   ml.MLAdminHome);  
            MLAdmin   mlAdmin   =   (MLAdmin)adminHome.create();      
            String   result   =   mlAdmin.getName("a@a.net");  
      %>  
     
  <p>  
  <center>        
  <h3>Emal   info</h3><br>  
  Input   Query   Emal   ID   :   <input   type="text"   name="email"><br><br>  
  <input   type="submit"   value="Go"><br>  
  <font   color="blue">  
   
  <b>Email   Adress:<%=result%></b>  
  </font>  
  </center>  
  </p>  
  </body>  
  </html>  
   
   
  但是还报错:  
  ml.MLAdminHome   cannot   be   resovled  
  PortableRemoteObject   cannot   be   reslolved  
   
  帮忙看看。Top

13 楼abckid9(abckid9)回复于 2006-03-20 15:17:01 得分 0

错误指示在    
  MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   ml.MLAdminHome);   部分  
   
  是否缺少引用或者jar包?Top

14 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2006-03-20 17:27:58 得分 0

MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   MLAdminHome.class);    
   
  认真看下书,认真检查下代码,这些问题不该犯的Top

15 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-03-20 17:49:46 得分 0

ejb太麻烦难学了哩,一个普通的业务bean要写4个类,3个部署文件,可怕  
  楼主还是新手的话,没必要现在学ejb的,打好基础再说。Top

16 楼abckid9(abckid9)回复于 2006-03-20 18:34:49 得分 0

MLAdminHome   adminHome=   (MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   MLAdminHome.class);   哪里错了?请指教Top

17 楼abckid9(abckid9)回复于 2006-03-20 19:43:46 得分 0

我觉得报错  
  ml.MLAdminHome   cannot   be   resovled  
  PortableRemoteObject   cannot   be   reslolved  
   
  可能是没有和MLAdminHome   连接上  
  还缺少一个引用  
  但是不知道怎么解决Top

18 楼abckid9(abckid9)回复于 2006-03-20 20:58:15 得分 0

有了比较大的突破,现在jsp已经不报错了  
  <%@   page   language="java"   %>  
  <%@   page   import="java.rmi.*"   %>  
  <%@   page   import="java.util.*"   %>  
  <%@   page   import="javax.naming.*"   %>  
  <%@   page   import="ml.*"%>  
  <%@   page   import="javax.rmi.PortableRemoteObject"%>    
   
  <!DOCTYPE   HTML   PUBLIC   "-//w3c//dtd   html   4.0   transitional//en">  
  <html>  
  <head>    
  <title>Lomboz   JSP</title>  
  </head>    
  <body   bgcolor="#FFFFFF">  
   
      <%   Context   ejbContext   =   new   InitialContext();  
            ml.MLAdminHome   adminHome=   (ml.MLAdminHome)   PortableRemoteObject.narrow(ejbContext.lookup("ml/MLAdminHome"),   MLAdminHome.class);  
            MLAdmin   mlAdmin   =   (MLAdmin)adminHome.create();      
            String   result   =   mlAdmin.getName("a@a.net");    
   
      %>      
     
  <p>  
  <center>        
  <h3>Emal   info</h3><br>  
  Input   Query   Emal   ID   :   <input   type="text"   name="email"><br><br>  
  <input   type="submit"   value="Go"><br>  
  <font   color="blue">  
   
  <b>Email   Adress:<%=result%></b>  
  </font>  
  </center>  
  </p>  
  </body>  
  </html>  
   
  但是运行页面时,报错:  
  An   error   occurred   at   line:   17   in   the   jsp   file:   /jsptest.jsp  
  Generated   servlet   error:  
  G:\workspace\ccc\work\org\apache\jsp\jsptest_jsp.java:67:   cannot   access   javax.ejb.EJBHome  
  file   javax\ejb\EJBHome.class   not   found  
            MLAdmin   mlAdmin   =   (MLAdmin)adminHome.create();      
   
  An   error   occurred   at   line:   17   in   the   jsp   file:   /jsptest.jsp  
  Generated   servlet   error:  
  G:\workspace\ccc\work\org\apache\jsp\jsptest_jsp.java:68:   cannot   access   javax.ejb.EJBObject  
  file   javax\ejb\EJBObject.class   not   found  
            String   result   =   mlAdmin.getName("a@a.net");    
   
  我分析是4楼ibiswang帖子中的内容3--“将ejb相关的home接口类与运行接口类(例如,你的util   class)以jar的方式放在WEB-INF/lib目标下”   我没有做好  
  但是我已经将ejb的jar包myEJB.jar放到我的tomcat工程的web-inf的lib下面了  
   
  请大家帮忙分析一下,谢谢  
  Top

19 楼bryantd(Delphi菜鸟)回复于 2006-03-21 11:24:57 得分 0

帮你顶Top

20 楼piaopiao11()回复于 2006-03-21 11:43:05 得分 0

没有j2ee.jarTop

21 楼abckid9(abckid9)回复于 2006-03-21 12:33:23 得分 0

谢谢bryantd  
   
  楼上,我已经引进jboss-j2ee.jar了。我的classpath文件如下,请大家指正:  
   
  <?xml   version="1.0"   encoding="UTF-8"?>  
  <classpath>  
  <classpathentry   kind="con"   path="org.eclipse.jdt.launching.JRE_CONTAINER"/>  
  <classpathentry   kind="var"   path="TOMCAT_HOME/common/lib/servlet-api.jar"/>  
  <classpathentry   kind="var"   path="TOMCAT_HOME/common/lib/jasper-runtime.jar"/>  
  <classpathentry   kind="var"   path="TOMCAT_HOME/common/lib/jsp-api.jar"/>  
  <classpathentry   kind="src"   path="WEB-INF/src"/>  
  <classpathentry   output="work"   kind="src"   path="work"/>  
  <classpathentry   kind="src"   path="/J2EE_test"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jboss-j2ee.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jnp-client.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jboss-client.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jboss-common-client.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jbosssx-client.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/log4j.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jnet.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/server/default/lib/jnpserver.jar"/>  
  <classpathentry   kind="var"   path="JBOSS32X/client/jboss-jaas.jar"/>  
  <classpathentry   kind="output"   path="WEB-INF/classes"/>  
  </classpath>  
  Top

22 楼piaopiao11()回复于 2006-03-21 12:45:22 得分 40

你这是eclipse   项目的classpath  
  在tomcat里面还是没有这些包  
  要把包考到WEB-INF/lib下面Top

23 楼GeminiFox(紫金山下,月牙湖畔)回复于 2006-03-21 12:50:34 得分 0

楼主脑子有毛病啊,干吗用jsp直接调用ejb?Top

24 楼abckid9(abckid9)回复于 2006-03-21 12:52:29 得分 0

piaopiao,我把WEB-INF/lib加入各个jar包了  
   
  现在的错误是:  
  javax.servlet.ServletException:   Name   ml   is   not   bound   in   this   Context  
  org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)  
  org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)  
  org.apache.jsp.jsptest_jsp._jspService(jsptest_jsp.java:92)  
  org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)  
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)  
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)  
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)  
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)  
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)  
  Top

25 楼piaopiao11()回复于 2006-03-21 13:00:44 得分 10

应该是在new   InitialContext();  
  加入环境  
  Hashtable   h=new   Hashtable();  
  h.putAll(System.getProperties());  
    String   url="jnp://127.0.0.1:1099";    
    String   fac="org.jnp.interfaces.NamingContextFactory";  
  h.put(InitialContext.PROVIDER_URL,url);  
  h.put(InitialContext.INITIAL_CONTEXT_FACTORY,fac);          
  Context   ejbContext   =   new   InitialContext(h);  
   
  你在试试  
  Top

26 楼ibiswang(神鸟)回复于 2006-03-21 13:00:46 得分 0

建议你好好找个完整的示例文章来做下,你对EJB   Container,   JNDI以及Web相关规范知道的太少了,你还是找个完整的示例吧,一步一步可能会好些!  
   
  上面提示的错误是你的JNDI中没有加入路径为ml的东东。  
   
  我想可能是你的ejb   module与你的jboss-web.xml以及web.xml配置之间出问题了。。Top

27 楼abckid9(abckid9)回复于 2006-03-21 13:35:33 得分 0

楼上说的jboss-web.xml,我为什么一直没找到?我是jboss3.2.8Top

28 楼jordan1(班君)回复于 2006-03-21 14:21:35 得分 10

关注!Top

29 楼abckid9(abckid9)回复于 2006-03-21 14:32:32 得分 0

刚才我查了资料,我是按这篇文章做的:  
   
  首先介绍JBoss容器中部署各类EJB对象的两种方法。下面的演示以Session   Bean为例,客户端是一个本机上的web应用。这里不对演示程序进行具体介绍。  
   
  第一种方式  
  把开发好的ejb   jar包和web应用的war包公共放在deploy目录下。  
   
  演示1:不需要jboss.xml文件和其他任何特殊的设置。  
   
  ejb-jar.xml:  
   
  <ejb-jar>  
   
                ······  
   
                              <ejb-name>ejbtest</ejb-name>  
   
                ······  
   
  </ejb-jar>  
   
  客户端:web应用中对web.xml不需要添加ejb信息,不需要jboss-web.xml文件。引用ejb对象的jsp文件如下:  
   
                ······  
   
                InitialContext   ctx   =   new   InitialContext();  
   
                Object   objref     =   ctx.lookup("ejbtest");                 //使用<ejb-name>                                                             beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);  
   
                ······  
   
  <!--[if   !supportEmptyParas]-->   <!--[endif]-->  
     
   
   
  我之前的错误是,没有把我的tomcat和jboss整合  
  按上文,我把myEJB.jar和client.war放到jboss-3.2.8.SP1\server\all\deploy文件夹  
   
  请问一下,怎么在jboss访问我的web工程client.war?  
  Top

30 楼abckid9(abckid9)回复于 2006-03-21 15:44:45 得分 0

已经解决了,谢谢各位  
  我一会儿把详细过程写一下Top

31 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2006-03-23 08:21:55 得分 0

楼主,我冒昧提个建议,从你的发言来看,你对RMI,JNDI,EJB的基本原理基本都不了解,这样写什么EJB是没什么意义的.Top

相关问题

  • jsp访问asp
  • JSP中访问数据库
  • jsp访问新闻组
  • jsp访问javabean和SQL..
  • jsp 访问统计问题
  • JSP页面不能访问?
  • Jsp访问日志问题
  • struts中访问ejb一问
  • 急问:访问EJB出错???
  • 关于JSP数据库访问(help me!!!!)

关键词

  • .net
  • j2ee
  • sp1
  • emal

得分解答快速导航

  • 帖主:abckid9
  • diy8187
  • ibiswang
  • piaopiao11
  • piaopiao11
  • jordan1

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo