如何在动态调用方法时在servlet中显示输出

时间:2014-10-10 11:24:29

标签: java servlets reflection

我正在尝试动态加载一个类并从我的Servlet中调用它的一个方法。

在我的Servlet中,我有以下代码:

PrintWriter out = response.getWriter();

try {
       Class<?> obj = Class.forName(myclassName);           
       Method method = obj.getClass().getMethod(myMethodName);
       String returnValue = (String) method.invoke(obj, null);
       out.println(returnValue);

 } 
catch(Exception e){}

在课堂上我有:

public class StudentClass {

  public String index()
  {
    return "This is From StudentClass";
  }
}

问题是当我运行我的应用程序时它不会显示任何内容。我希望得到This is From StudentClass作为输出,这个类的基本index方法正在返回。

你能告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的invoke用法错误:

Class<?> obj = Class.forName(myclassName); // this return a Class, not an instance
Method method = obj.getClass().getMethod(myMethodName);
String returnValue = (String) method.invoke(obj, null);

正确使用会是这样的:

Class<?> clazz = Class.forName(myclassName);           
Object obj = clazz.newInstance(); // this give you a StudentClass instance
Method method = clazz.getMethod(myMethodName);
String returnValue = (String) method.invoke(obj);

另请参阅Class.forName(String)Method.invoke(Object, Object...)以及this tutorial on reflection API