不能这么加载的,应该用MyBeanClass myBean = (MyBeanClass)Class.forName(ss).newInstance();

解决方案 »

  1.   

    leonzhao(灯泡) :你这样做,我是不是就要写死MyBeanClass这个名字。我自己看JAVA帮助,弄出来了:java.lang.ClassLoader a;
    java.lang.reflect.Method   d;
    java.lang.Object o;
    String sClass = "IDIIL.Math.add1";//类名可为变量
    java.lang.Object[] p = {Integer.valueOf("1")};//参数,整数1
    a = java.lang.ClassLoader.getSystemClassLoader();
    java.lang.Class b[] = {a.loadClass(sClass)};
    d = b[0].getDeclaredMethods()[0];//得到该类的第一个方法
    o = b[0].newInstance();
    String s = String.valueOf( d.invoke(o, p));//获得第一个方法的返回值
      

  2.   

    好象不可以这样,可以用sessioon 来处理动态加载了!
      

  3.   

    <jsp:useBean id="myBean" scope="page" class="<%=ss%>"/>
    肯定不行的
    你可以考虑这样试试<jsp:useBean id="myBean" scope="page" class=ss/>
      

  4.   

    没有什么意义,纯粹好玩吧?这样不符合JAVA开发规范,因为容易造成代码不清晰
      

  5.   

    可以看看这个数据库问题,access做的.
    http://expert.csdn.net/Expert/topic/1483/1483072.xml?temp=.4770471
      

  6.   

    当然有意义,比如我有N个客户端模块,要调N个服务器端bean,而这些服务器端bean有一些公用功能可以提出,则我可建一publicBean,所有客户端都请求一个jsp,这个jsp调publicBean,publicBean 再调各个bean。
    就能实现公用化,易维护。公用逻辑不改时,增加新模块,服务器端只要新加一个bean,不需作其它改变。
      

  7.   

    公用的bean简易代码如下:package IDIIL.Math;
    import java.lang.*;
    import java.lang.reflect.Method;public class getUnitData
    {  public getUnitData()
      {
      }
    public String getData(String DirName)
    {
    try
    {
    ClassLoader oClassLoader = ClassLoader.getSystemClassLoader();
    Class oClass = oClassLoader.loadClass("IDIIL.Math." + DirName);
    Class oParamType1 = java.lang.Integer.TYPE ;
    Class oParamType[] = {oParamType1 };
    Method oMethod = oClass.getDeclaredMethod("getData", oParamType);//oParamType: mthod params datatype
    Object oInstance = oClass.newInstance();
    Object[] oParam = {Integer.valueOf("1")}; //param of the getData mthod: multiple
    String sStr = String.valueOf(oMethod.invoke(oInstance, oParam));
    return sStr;
    }
    catch(Exception e)
    { }
    return "";
    }
    }公用的jsp如下:
    <jsp:useBean id="myBean" scope="page" class="IDIIL.Math.getUnitData"/>
    <%
    String sDirName = request.getParameter("DirName");
    out.print(myBean.getData(sDirName));
    %>但由于公用bean中使用的是loadClass的方法,需要将bean所在目录放在ClassPath环境变量中,这样设置复杂了,需且新增、修改一个class有时好像需要重启WEB服务器,所以
      

  8.   

    感谢 leonzhao(灯泡) 
    用灯泡Class.forName(var string)的方法,动态获取类,结合我找出的动态获取方法及调用方法的做法,终于实现了,代码如下:<%
    String sDirName = request.getParameter("DirName");
    Class oClass = Class.forName("IDIIL.Math" + sDirName);
    // ClassLoader oClassLoader = ClassLoader.getSystemClassLoader();
    // Class oClass = oClassLoader.loadClass("IDIIL.Math." + DirName);
    Class oParamType1 = java.lang.Integer.TYPE ;
    Class oParamType[] = {oParamType1 };
    java.lang.reflect.Method oMethod = oClass.getDeclaredMethod("getData", oParamType);//oParamType: mthod params datatype
    Object oInstance = oClass.newInstance();
    Object[] oParam = {Integer.valueOf("1")}; //param of the getData mthod: multiple
    String sStr = String.valueOf(oMethod.invoke(oInstance, oParam));
    out.print(sStr);
    %>不过我还是要问:
    MyBeanClass myBean = (MyBeanClass)Class.forName(ss).newInstance();
    灯泡你这句话能写活吗?比如把MyBeanClass换为java.lang.Object之类通用的而不是写死的,或者能有其它方法通用,这句话倒是简单,但如何让他通用??