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里就行了。