Servlet无法动态读取Class
题目描述
最近我想做一个Servlet的demo。这个demo中用户可以将自己的class文件上传到我的服务器中,然后我用我的Servlet读取用户上传的class中的方法。但我卡在Serlvet无法动态读取类这个环节。
代码
代码1 showMsg (Servlet)
public class showMsg extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public showMsg() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
try {
out.println(ReadClass.getProperty());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.flush();
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
代码2 ReadClass (java)
public class ReadClass {
public static String getProperty() throws ClassNotFoundException {
try {
URL url = new URL(null, "file:C:/TestClass/");
ClassLoader classLoader = new URLClassLoader(new URL[]{url}, ReadClass.class.getClassLoader());
Class<?> thisClass = classLoader.loadClass("add");
return thisClass.getMethods()[0].getName();
}
catch (Exception e)
{
e.printStackTrace();
}
return "";
/*
File myFolder = new File("file:C:/TestClass/");
URLClassLoader classLoader = null;
try {
classLoader = new URLClassLoader(new URL[]{myFolder.toURI().toURL()}, Thread.currentThread().getContextClassLoader());
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
System.out.println(classLoader);
//获取对象类型 包名.类名 ?代表任意类型对象
Class<?> classType=Class.forName("add", true, classLoader);
Object obj = null;
try {
obj = classType.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//获取对象中的所有方法
Method[] methods = classType.getDeclaredMethods();
try {
return methods[0].invoke(obj).toString();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return "";
*/
}
}
补充说明
我要读取的class的路径是“C:/TestClass/add.class”
相关问题
但当我把相同的代码复制到普通的java项目中时,这个问题却没有出现,程序能完美的运行。我查了很多资料,最相近的问题的解决方案是让我给ClassLoader设置一个家长。如你们所见,我的代码中有设置,但是仍旧报错,请问大家知道原因吗
相似问题的链接
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论