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

时间: 2024-10-22 01:04:23

java中Web Project中加载dll文件的终极解决方案的相关文章

javascript-Qt加载dll文件后在JavaScript中无法使用

问题描述 Qt加载dll文件后在JavaScript中无法使用 实现目的:在Qt加载dll文件,dl文件实现提示框功能,dll文件的类为Operator,加载后作用js的一个属性被js使用. 问题:在js中就不能成功调用,并提示: Uncaught exception at :/test.js:6: TypeError: Result of expression 'Operator.prompt' [undefined] is not a function. 尝试在main.cpp中调用这个类的

java 在web project中的jsp中怎么用dropzone.js实现拖拽上传

问题描述 java 在web project中的jsp中怎么用dropzone.js实现拖拽上传 我现在想做一个拖拽上传,看别人说用dropzone.js!能做,想请大神解答!图片说明 解决方案 好了,自己解决了 ,谢谢各位 解决方案二: http://danielm.herokuapp.com/demos/dnd/image-preview.php http://download.csdn.net/download/u014166482/7753273

java jni加载dll文件异常

问题描述 java jni加载dll文件异常 Can't load this .dll (machine code=0x101) on a AMD 64-bit platform 解决方案 32位,64位兼容性的问题吧,, 解决方案二: 可能是32位和64位的兼容问题

JavaWeb中web.xml初始化加载顺序

需求说明 做项目时,为了省事,起初把初始化的配置都放在每个类中 static加载,初始化配置一多,就想把它给整理一下,这里使用servlet中的init方法初始化. web.xml说明 首先了解下web.xml中元素的加载顺序: 启动web项目后,web容器首先回去找web.xml文件,读取这个文件 容器会创建一个 ServletContext ( servlet 上下文),整个 web 项目的所有部分都将共享这个上下文 容器将 转换为键值对,并交给 servletContext 容器创建 中的

基于OSGI的WEB项目如何加载制定文件夹jsp文件运行

问题描述 现在手上开发的一个项目是基于OSGI的web项目,运行期会把模块打成jar包放在一般web工程下面去运行,运行环境暂订tomcat. 现在出现的问题如下:项目中有一个模块会生成一些文件到指定文件夹中(运行期为文件服务器),生成的文件包括js,jsp,css文件,其中js会到模块中去做请求后台数据,并且生成的文件会用到模块中的js或css样式.请问如何才能将生成的文件加载到tomcat中运行. 解决方案 可以参考一下这个:http://www.enet.com.cn/article/20

VS2010“当前不会命中断点。还没有为该文档加载任何符号”寻觅终极解决方案

问题描述 问题如图中所示,在网上找了多种方法依旧无法解决,项目的的确确是在dubug模式下运行的,可有的代码就是无法被断点命中,调试起来诸多不便. 解决方案 解决方案二:关闭vs重新打开再试试.解决方案三:是附加到进程调试的时候出现的?那得重新再弄下,或者关闭在看下解决方案四:此问题源于我对自己做的项目的无知所致,之前是做j2ee开发的,公司几年前的项目需要升级,无奈在学校里学了些.net,就交给我升级,不料对.net确实有许多不懂的地方.以前发帖总是石沉帖海,这次有幸被回答,非常感谢!我的终极

有关“利用反射动态加载.DLL文件,创建该DLL文件中一个类的实例,序列化该实例并保存成二进制文件,读取二进制文件反序列化时出错”紧急求救

问题描述 各位前辈:实在是找不到如何解决这个问题.或者这个问题根本就没有办法解决?stringpath=@"E:Temp.dll";Assemblyassembly=Assembly.LoadFrom(path);AppDomain.CurrentDomain.Load(assembly.GetName());IControllercontroller=null;///遍历程序集中的所有类型:Type[]plugTypes=assembly.GetTypes();foreach(Typ

如何用Openfiledialog控件,来加载DLL插件?求大神指导

问题描述 如何用Openfiledialog控件,来加载DLL插件?求大神指导 就是用openfiledialog打开dll后,宿主程序上对应的dll插件会显示出来 解决方案 Assembly.LoadFrom(ofdlg.FileName) 解决方案二: 然后反射创建对象,执行代码 解决方案三: 回答与一楼同,根据file dialog中获取的路径加载dll 解决方案四: LoadLibrary根据file dialog中获取的路径加载dll

C#中如何动态加载Dll

1.新建测试dll及方法,用vs2010新建winform程序,具体代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace reflect { public