Opencv实现盲水印技术(二)——使用maven构建Java Web工程
来源:互联网 发布:浙江大学翁恺 c语言pat 编辑:程序博客网 时间:2024/05/22 01:47
前言
在本系列文章的第一篇文章中讲述了在普通Java工程中使用opencv构建应用程序,而在实际项目中,往往需要构建Java Web项目。本文应用了springmvc框架,使用maven构建工程,将应用部署到Tomcat容器中,对外提供Http接口或者其他协议接口,供其他系统调用。
构建Java Web
使用maveb构建Java Web工程,需要解决两个问题:
1、加载opencv的jar包,即opencv-300.jar文件;
2、由于opencv是C/C++写的,在windows下编译成了dll动态链接库,在linux下编译成了so动态库,因此部署到Tomcat容器中时,需要能够加载该动态库,只有这样,opencv-300.jar中封装的JNI接口,才能正确的调用。
问题一、使用maven加载本地opencv-300.jar文件
1、首先在WEB-INF目录下创建lib目录,然后将opencv-300.jar文件置于其中。目录结构见下图。
2、在pom文件中添加如下依赖。
<dependency> <groupId>opencv-300.jar</groupId> <artifactId>opencv-300.jar</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/opencv-300.jar</systemPath> </dependency>注意此处添加的依赖必须要指明scope。scope为system时,表示需显式的提供包含依赖的jar包,maven不会再去Repository中查找该依赖。
问题二、加载opencv动态链接库
当然,你可以直接将opencv的动态库直接放到tomcat/bin下,这样Tomcat容器启动后会加载该库到jvm中,但是这样会增加运维成本,本文使用动态加载opencv库,当spring容器启动时,将opencv库加载到jvm中。
首先将opencv动态库放到wepapp目录下,即web工程的根目录,使用下面的函数,将opencv动态库所在的路径加载到环境变量中。
private void addDirToPath(String s){ try { //获取系统path变量对象 Field field=ClassLoader.class.getDeclaredField("sys_paths"); //设置此变量对象可访问 field.setAccessible(true); //获取此变量对象的值 String[] path=(String[])field.get(null); //创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录 String[] tem=new String[path.length+1]; //将原来的path变量复制到tem中 System.arraycopy(path,0,tem,0,path.length); //将增加的目录存入新的变量数组中 tem[path.length]=s; //将增加目录后的数组赋给path变量对象 field.set(null,tem); } catch (Exception e) { e.printStackTrace(); } }在上述函数中,首先使用反射获取到jvm的环境变量,然后将要增加的目录放到环境变量中。
然后使用@PostConstruct语法糖,在Spring容器启动的时候去执行加载opencv动态库的操作。
@PostConstruct public void init(){ //获取存放dll文件的绝对路径 String path = System.getProperty("riskArsenalWeb.root"); System.out.println("######## 路径为 : " + path + " ########"); //将此目录添加到系统环境变量中 addDirToPath(path); //加载相应的dll文件,注意要将'\'替换为'/' System.load(path.replaceAll("\\\\","/")+"/opencv_java300.dll"); System.loadLibrary(Core.NATIVE_LIBRARY_NAME); System.out.println("######## Opencv加载完毕 ########"); }关于@PostConstruct的介绍,可以看我之前转载的关于IOC的一篇博文。
到此,Java Web工程构建完成。
小结
本文讲述了如何构建Java Web工程,动态加载opencv库,接下来的文章将对实现盲水印技术的算法进行介绍。
0 0
- Opencv实现盲水印技术(二)——使用maven构建Java Web工程
- Opencv实现盲水印技术(一)——构建Java工程
- Opencv实现盲水印技术(三)——傅里叶变换算法及盲水印实现
- 使用Maven构建eclipse web工程
- 使用Maven构建eclipse web工程
- 使用Maven构建eclipse web工程
- 使用Maven构建eclipse中的web工程
- maven 构建 web 工程
- 项目构建maven——使用eclipse创建maven工程
- 使用web技术构建Android应用(二)——序
- Eclipse使用Maven构建web项目二
- Eclipse—使用Maven构建Web Project
- Maven构建Java工程
- Maven构建Java工程
- maven java工程构建
- Eclipse 使用 Maven 构建动态 Web 工程,默认无 java 目录的解决方法
- 使用maven构建java/java web项目
- eclipse 构建maven web工程
- 练习题目-抛硬币
- 原型和原型链,作用域链区别
- 拖动浮层(div等任何标签)
- dubbo配置文件报错..
- 【PAT甲级】1017. Queueing at Bank (25)
- Opencv实现盲水印技术(二)——使用maven构建Java Web工程
- PM2.5传感器
- ZOJ#3202:Second-price Auction
- android developer tiny share-20161009
- android常用网址大全
- iOS 打包应用并使用Application Loader上传spa包到AppStore
- Redis与spring的整合遇到问题
- JNI NDK AOP架构设计 UML建模 IOC架构设计 MVP架构等安卓专有名词简介
- 一道让我踏进坑的字符串题目