一、在java web项目中调用c++程序简单案例
这个是通过java调用通过jni技术调用c++的dll程序
开始之前,首先了解一些jni是什么?:
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,
它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,
只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。
但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。
JNI标准至少保证本地代码能工作在任何Java虚拟机实现下。
案例如下:
1、首先新建一个java web项目为proejct,然后编写一个java类,因为要使用jni来调用c++程序,因此该类中的方法名录需要用native修饰且只有方法声明,没有实现,
如下:
package com.coffee.common;
public class FaceRecognition
{
public native static String faceRecognition(String faceImgPath);
}
2、在eclipse中使用javah命令来编译头文件;
在elipse中点击【Run】-->【External Tools】-->【External Tools Configurations..】
测试会弹出一个窗口然后选择【Program】右击新建,如图:
这样我们就可以在eclipse中使用doc环境进行编译,如图,并输入红框中的命令,然后回车,这样就完成了Javah编译:
3、新建一个C++项目,使用VS工具,如图所示:(或者您也可以使用别的更好的方式)
4、在新建的C++项目中加入必要的头文件
JDK中两个h头文件:jni.h jni_md.h两个文件的目录分别位于安装好的JDK目录下include与include/win32下
然后在加入之前我们编译好的java头文件:
将这三个文件拷贝到新建的C++项目下,然后添加到头文件夹中,这时我们可以新建一个C++源代码文件来
编写我们的逻辑代码:如图所示的结构
5、编写c++代码前准备工作
打开使用javah编译好的头文件将 #include<jni.h> 更改为 #include "jni.h"
并将该该h文件中的方法复制到FaceRecognition.cpp中,如图所示:
然后为该c++项目生成解决方案,然后在该项目的Debug目录下找到face_recognition.dll文件,并将其拷贝到
Tomcat安装目录的bin目录下。
当然在使用native方法之前需要先将dll文件加载进来,此时我们可以在FaceRecognition类中添加加载方法
package com.coffee.common;
public class FaceRecognition
{
static{
System.loadLibrary("face_recognition");
}
public native static String faceRecognition(String faceImgPath);
}
6、最后将带有native的方法在业务逻辑中进行调用,启动Tomcat,这样我们就可以进行访问调用了。
public class LoginServer{
private FaceRecognition fr;
public void login(){
fr = new FaceRecognition();
fr.faceRecognition("c:\\ddd");
}
}