打印出两个id的hashCode看看,应该不同。

解决方案 »

  1.   

    <jsp:useBean id="corba" scope="application" class="com.pci.EjbClient" />
    后面又有一个jsp的页面用到:
    <jsp:useBean id="corba" scope="session" class="com.pci.EjbClient" />
    ------------------------------------------------------------------------
    请问第二条语句是否会生成实例,还是引用了上面第一条语句生成的那个实例?
    -------------------------------------------------------------------------
    怎么测试出是不是同一个实例?在不修改EjbClient的情况下
      

  2.   

    这个太easy了,你去查一下tomcat/work目录下相对应的文件,你就能找到把这个jsp转成servlet的文件,在里面一看就知道了,大概是这样写的
    com.pci.EjbClient corba = null;
          synchronized (pageContext) {
            sc = (com.pci.EjbClient) pageContext.getAttribute("corba", PageContext.PAGE_SESSION);
            if (corba == null){
              try {
                corba = (com.pci.EjbClient) java.beans.Beans.instantiate(this.getClass().getClassLoader(), "com.pci.EjbClient");
              } catch (ClassNotFoundException exc) {
                throw new InstantiationException(exc.getMessage());
              } catch (Exception exc) {
                throw new ServletException("Cannot create bean of class " + "com.pci.EjbClient", exc);
              }
              pageContext.setAttribute("corba", corba, PageContext.PAGE_SESSION);
            }
          }
      

  3.   

    corba = (com.pci.EjbClient) pageContext.getAttribute("corba", PageContext.PAGE_SESSION);从以上jsp编译后的代码可以看出jsp是按bean的id和scope来定位一个bean的,如果没找到才重新实例化一个新的!!
      

  4.   

    <jsp:useBean id="corba" scope="application" class="com.pci.EjbClient" />
    后面又有一个jsp的页面用到:
    <jsp:useBean id="corba" scope="session" class="com.pci.EjbClient" />
    不太理解,什么叫做 后面又有一个 jsp 的页面用到啊??如果是另外一个 jsp 页面,肯定是新的!
    如果是本页面,根据上面的代码,会!!corba = (com.pci.EjbClient) pageContext.getAttribute("corba", PageContext.PAGE_SESSION);
    因为此时是 PAGE_APPLICATION啊!!
      

  5.   

    首先非常感觉各位的帮助。
    但根据:
    corba = (com.pci.EjbClient) pageContext.getAttribute("corba", PageContext.PAGE_SESSION);
    我觉得还不能说明就一定能建立新的实例。
    因为getAttribute(String, int);这个方法的内部实现有可能考虑到
    PageContext.PAGE_APPLICATION比PageContext.PAGE_SESSION的范围广,
    所以先递归调用一下它自己getAttribute("corba", PageContext.PAGE_APPLICATION);
    找不到才确认返回null啊。
    有没有其它的方法可以准确测试出是不同实例?而且我不能修改EjbClient的代码的