您的位置:首页 > 编程语言 > Java开发

java中如何从远程主机(服务器)或本地加载jar文件

2016-01-13 10:15 633 查看
我们的java程序其实是由若干个.class文件组成。当程序在运行时,就会调用一个入口函数,即main()函数,来调用系统的相关功能,而这些功能都被封装在不同的class文件中,所以经常要从这个class文件中调用另一个class文件中的方法。如果另外一个文件不存在,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要的所有class文件,而是根据需要,通过java的类加载器(ClassLoader)来动态地加载所需的class文件到内存中,class文件只有被载入到了内存中之后,才能被其它class所引用。所以,ClassLoader就是用来动态加载class文件到内存当中的。
1、ClassLoader加载类的过程
java利用ClassLoader将类载入内存,并且在同一应用中,可以有多个ClassLoader,通过委派机制,把装在的任务传递给上级的装载器,依此类推,直到启动类装载器(没有上级的类装载器,处于最顶端)。如果启动类装载器能够装载这个类,那么它首先装载。如果不能,则往下传递。URLClassLoader是ClassLoader的子类,它用于从指向JAR文件和目录的URL搜索路径下加载类和资源。也就是说,通过URLClassLoader就可以加载指定jar中的class文件到内存中。
2、举例说明
(1) 在eclipse中创建一个java项目,例如urlTest0,定义一个接口,如下:
package com.example;

public interface ActionInterface{

public String action();
}
然后,右击项目->export->java->JAR file,然后点击next,选择jar文件存放的位置。我存放的位置是D:/testInterface.jar
(2)接着再新建一个java项目,urlTest1.引入之前打包好的jar文件,即testInterface.jar,并创建TestAction类,使它实现ActionInterface接口。如下
package com.example;

import com.example.ActionInterface;

public class TestAction implements ActionInterface{

public String action(){

return "this ActionTest class";
}
}
将其打包成test.jar文件,方法同上。放到你想放的位置。比如,放到web服务器上,如tomcat的webapps子目录下。这样是为了通过http方式进行访问。
(3)新建java项目,urlTest2,引入testInterface.jar,并创建一个带有main()函数的类,代码如下:
package com.example;
import com.example.ActionInterface;

public class ClassLoaderTest{

public static void main(String args[]){
File file=new File("http://10.50.114.12:8080/test.jar");//10.50.114.12是我远程主机的ip地址,如果test.jar是存放在本地web服务器上的话,只需要将10.50.114.12换成localhost即可
URL url=file.toURI().toURL();
@SuppressWarnings("resource")
URLClassLoader myClassLoader=new URLClassLoader(new URL[]{url},Thread.currentThread().getContextClassLoader());
Class<?> myClass=myClassLoader.loadClass("urlTest1.TestAction");
ActionInterface action1=(ActionInterface)myClass.newInstance();
String str=action1.action();
System.out.println(str);
}
}
运行的结果是:
this ActionTest class
示例2
创建一个java项目test,并创建一个类,TestAction,代码如下:
package com.example.netlab;

public abstract class TestAction{

public TestAction(){
System.out.println("Hello,world!");
}
}
将该项目导出为test.jar
放到web服务器上,位置和上面一样。
在另一个需要加载这个test.jar文件的主机上,创建一个java项目,demo,然后再创建一个类UseClassloader,代码如下:
package com.example.netlab;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class UseClassloader {

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, MalformedURLException {
File file=new File("http://10.50.63.109:8080/test.jar");
URL url=file.toURI().toURL();
@SuppressWarnings("resource")
URLClassLoader myClassLoader=new URLClassLoader(new URL[]{url},Thread.currentThread().getContextClassLoader());
Class<?> myClass=myClassLoader.loadClass("com.example.netlab.TestAction");
Object o=myClass.newInstance();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: