Web Project中加载dll文件的终极解决方案

1.首先把要加载的dll文件拷贝到Web Project的src目录下

2.声明一个TestDLL类,名字请根据实际命名

package com.anllin.jni;

public class TestDLL
{
public TestDLL(String... filenames)
{
// 取得src下的物理路径,
String path = TestDLL.class.getResource("/").getPath();
// 将路径里的%20替换成空格,不然在src目录下会找不到dll文件
path = path.replaceAll("%20", " ");
//output : /D:/myEclispe8.6 projects/jnitest/WebRoot/WEB-INF/classes/
System.out.println(path);
//注:使用System.load()时,文件名必须包含.dll后缀,如test1.dll
for (String filename : filenames)
{
System.load(path + filename);
}
}

public native void test1();

public native void test2();

public native void test3();
}

3.声明一个调用类TestInvoker,名字请根据实际命名

package com.anllin.jni;

public class TestInvoker
{
private TestDLL testDll;

public TestInvoker()
{
// 注意,一定要确定DLL之间的依赖关系,谁先加载,谁后加载,不然会报错,先加载的放在前面
      testDll = new TestDLL("test1.dll", "test2.dll", "test3.dll");
}

public void test1()
{
testDll.test1();
}

public void test2()
{
testDll.test2();
}

public void test3()
{
testDll.test3();
}
}

4.这种Dll文件加载方式的好处:

a.当你有多个Web Project,每个都要去调用DLL时,就不冲突了,如果DLL是放在tomcat的bin下的话,每加载一次都是加载相同的dll,会报错,我做的项目就是这样。

b.DLL文件好管理,放到src下就行,就算多个Web Project,每一份DLL都是一个拷贝,彼此之间不依赖,耦合性低。

c.方便布署,将项目打包成war包后,就象一般项目一样,放到tomcat里就行了。

posted @ 2012-01-02 11:53  水之原  阅读(3456)  评论(1编辑  收藏  举报