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

解决方案 »

  1.   

    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("[email protected]");
      

  2.   

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

  3.   

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

  4.   

    我的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("[email protected]");
      %>
     
    <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
    不知道是为什么
      

  5.   

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

  6.   

    谢谢楼上,按你的内容修改后:<%@ 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("[email protected]");
      %>
     
    <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工程而得到的
      

  7.   

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

  8.   

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

  9.   

    不好意思,笔误,我现在的代码是:<%@ 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("[email protected]");
      %>
     
    <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帮忙看看。
      

  10.   

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

  11.   

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

  12.   

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

  13.   

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

  14.   

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

  15.   

    有了比较大的突破,现在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("[email protected]");   %>  
     
    <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("[email protected]"); 我分析是4楼ibiswang帖子中的内容3--“将ejb相关的home接口类与运行接口类(例如,你的util class)以jar的方式放在WEB-INF/lib目标下” 我没有做好
    但是我已经将ejb的jar包myEJB.jar放到我的tomcat工程的web-inf的lib下面了请大家帮忙分析一下,谢谢
      

  16.   

    谢谢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>
      

  17.   

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

  18.   

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

  19.   

    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)
      

  20.   

    应该是在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);你在试试
      

  21.   

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

  22.   

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

  23.   

    刚才我查了资料,我是按这篇文章做的:首先介绍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?
      

  24.   

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