不能这么加载的,应该用MyBeanClass myBean = (MyBeanClass)Class.forName(ss).newInstance();
解决方案 »
- web网站的bug,求高手解决
- db2复制表中的数据(速结)
- 换行操作
- jsp中的forward和inclued的应用
- ★★★★★复杂的投票系统站:不固定的N百个投票,每个投票下选项也不固定.如何控制每个选项投票间隔不低于10分钟?!
- Eclipse总是提示找不到:/WEB-INF/struts-html.tld。
- 为什么我的程序窗口大小不准确
- myeclipse6.5 配置jquery 自动提示
- 什么官方推介,tomcat像狗屎,赞同跟帖,resin比它好n倍,妈的翩翩我的服务商用tomcat
- 急问各位javascript和vbscript高手
- 我上不了csdn了!!!大家看看怎么回事,最好是这个网页的开发者!!
- Tomcat shutdown 时出现异常,高分求救~~~
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));//获得第一个方法的返回值
肯定不行的
你可以考虑这样试试<jsp:useBean id="myBean" scope="page" class=ss/>
http://expert.csdn.net/Expert/topic/1483/1483072.xml?temp=.4770471
就能实现公用化,易维护。公用逻辑不改时,增加新模块,服务器端只要新加一个bean,不需作其它改变。
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服务器,所以
用灯泡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之类通用的而不是写死的,或者能有其它方法通用,这句话倒是简单,但如何让他通用??