本文檔詳細說明了Linux下Web項目調用Matlab函數的完整操作,文章適合對Java、Linux有一定基礎瞭解的人羣(不瞭解也沒什麼,無非是多試幾次)。因Linux作爲服務器,所以未在其上安裝Matlab主程序,只安裝了運行環境MCR。
本文檔內所述的所有版本軟件均以32位爲準,JDK與MCR也使用32位。若你的系統爲64位,Linux系統同樣爲64位,則請儘量選擇使用64位版本的JDK與MCR。
由於Matlab的版本限制問題,請保證Matlab主程序和MATLABCompiler Runtime版本一致,本文以Matlab_R2012a_glnx32演示。
本文介紹的是web項目使用jsp調用matlab,環境需要安裝JDK,且需設定完整JAVA環境變量,本文Windows與Linux中均需安裝同版本同位數的JDK。
注:本文中出現的 win32指32位系統,win64則爲64位系統。
本文采用的系統版本爲中標麒麟國產操作系統,內核Linux,調用Matlab。
MCR= MATLAB Compiler Runtime
本文中會在各個環節最後一項中註明本環節容易出現的錯誤和解決辦法。
實現該功能原理:
在windows上編寫Matlab的算法,後打包發佈成Jar文件;編寫Java代碼,引用Matlab運行包JavaBuild.jar,並加入算法Jar包。
若單獨運行該算法,則將Java代碼與這2個Jar包進行發佈打包成Jar,將此Jar包導入Linux後通過命令java –jar xxx.jar執行該程序。
若該算法是項目一部分,則不需要生成Jar包,直接在項目中加入算法包和運行包,調用即可。
==========================================================================
實現步驟:
1、 安裝Matlab
2、 安裝MATLABCompiler Runtime
3、 編寫Matlab算法
4、 算法生成Jar包
5、 編寫Java代碼調用算法Jar包
6、 發佈完整Jar執行
7、 Windows下Web項目JSP調用Matlab
8、 調用Matlab問題分析與解決
9、 Linux安裝MATLAB Compiler Runtime操作
10、Linux安裝Tomcat
11、Linux下web項目JSP調用Matlab
==========================================================================
安裝Matlab(省略非必要說明):
1、 直接點開安裝文件,執行setup.exe。
3、 該文件祕鑰請到安裝文件路徑:crack/ install.txt中,看到standalone選項下的enter the "file installation key",複製其中的一串數字,本文爲38699-60149-36808-21840-05491。
4、後續步驟按提示下一步安裝完成即可。
5、安裝完畢後,請打開程序目錄:MATLAB\R2012a\runtime\win64,將文件mclmcrrt7_17.dll放入文件系統:C:\Windows\System32。如果是64位系統,還需放到C:\Windows\SysWOW64
==========================================================================
安裝MATLAB Compiler Runtime(省略非必要說明):
1、 如果有與Matlab主程序版本一致,位數一致的安裝文件,請直接安裝;若沒有,則找到安裝文件所在目錄:MATLAB\R2012a\toolbox\compiler\deploy\win64,找到裏面的MCRInstaller.exe,執行安裝。(注:標紅路徑是根據自己的系統位數而定,也可能是win32)
2、 安裝過程中請以不聯網安裝。
3、 激活所需要的license文件,請指向安裝文件目錄中的:crack/ lic_standalone.dat
4、 安裝完成後需要調整本地的環境變量順序,請將Path中關於MATLAB Compiler Runtime放到Matlab主程序環境變量前面,同時要保證Java環境變量在這兩者之前。
例如:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; F:\Program Files\MATLAB\R2012a\runtime\win32;F:\Program Files\MATLAB\R2012a\bin;F:\ProgramFiles\MATLAB\MATLAB Compiler Runtime\v717\runtime\win32
變更爲
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;F:\Program Files\MATLAB\MATLAB CompilerRuntime\v714\runtime\win32;F:\Program Files\MATLAB\R2012a\runtime\win32;F:\ProgramFiles\MATLAB\R2012a\bin
==========================================================================
編寫Matlab算法並生成Jar:
1、 打開Matlab主程序,MATLAB\R2012a\bin\matlab.exe。
如果CPU爲AMD,請添加系統環境變量:BLAS_VERSION:Matlab所在路徑
2、這裏我們編寫一個函數算法,file à new à function,在彈出層填上如下信息。
函數內容爲,傳入2個參數a、b,運算加減法,返還sum和sub,獲取時可以獲取1個或2個。接着保存該function,Matlab的算法格式爲m。
3、在Matlab主界面Command Window中輸入,deployTool。
4、這裏直接創建一個新的算法項目,name爲指定項目名稱,location爲指定項目的空間位置,可以自定義,type請選擇Java Package,我們這裏是用Java調用該程序,點擊OK。
5、 在彈出的JavaPackage窗口中,點擊Build中class下的add Class,這裏需要指定class的名稱,該class指的是Java中你調用的Object。
6、 繼續點擊Addfiles,找到之前編寫的function文件,導入進去
7、 點擊,會將該算法函數封裝成Jar文件,導出目錄爲3步驟中設置的location地址。
8、 在Math\distrib中的Jar即爲算法包(這裏的Math是步驟3中的name)。
9、完成。
==========================================================================
編寫Java代碼調用算法Jar包:
注意事項:此步驟進行前,請保證安裝了JDK,cmd環境下執行java命令確認。
1、 創建的Java項目,JDK需要與系統JDK一致,否則可能導致無法本機測試;
這裏需要導入Matlab的庫,目錄爲:
MATLAB CompilerRuntime\v717\toolbox\javabuilder\jar\javabuilder.jar
2、 創建Class文件,引入算法jar包到項目中,在代碼中調用算法對象。(注意:在項目工程中導入1和2中的jar包,web工程放到lib下面,java工程以引入外部JAR形式)
3、 繼續編寫完畢代碼
4、 編寫完畢後直接運行代碼測試,輸出2個結果21和-1即爲正確。若出現問題,請移步第8步。
5、 右鍵java項目,導出,選擇導出爲RunnableJar file,下一步
6、 繼續,在Launchconfiguration中選擇自己編寫的java代碼。Export destination中填寫導出Jar文件的目錄和文件名,完成。
7、 測試該Jar,打開cmd窗口,輸入 java –jar文件所在目錄/MathForJava.jar
若執行成功,則完成測試。
若提示命令有誤,檢查自己的Java環境變量
8、無法執行本地調用Matlab函數JAR包,容易出現的問題
a檢查你的環境變量Path:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
F:\Program Files\MATLAB\MATLAB Compiler Runtime\v717\runtime\win32;
F:\Program Files\MATLAB\R2012a\runtime\win32;F:\ProgramFiles\MATLAB\R2012a\bin;
這是2個程序,需要都配置環境變量。
b Matlab與MCR都要安裝,只安裝一個不夠,因爲需要編寫函數生成JAR,只生成JAR還需要運行時環境。
==========================================================================
Windows下Web項目JSP調用Matlab:
本環節需要準備JDK和JAVA編譯器以及部署項目服務器,本節使用Eclipse和Tomcat。
1、 創建web工程,工程中需要引入javabuild.jar和Matlab函數的JAR包,直接放到lib裏
2、 下面進行對Matlab函數Math.jar進行調用,分2種方式,本文僅作簡單測試,並不搭建web框架進行傳地址。
3、 使用JSP測試調用sum2.jar中封裝對象,測試函數輸出結果。
A 創建jsp頁面,在jsp頁面頭部文件引用包
<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%> <%@ page import="com.mathworks.toolbox.javabuilder.*" %> <%@ page import="com.mathworks.toolbox.javabuilder.internal.*" %> <%@ page import="Math.MathClass" %>
中間2條引入爲需要引入的包和異常處理支持,最後一個爲Matlab函數JAR包對應的對象。
頁面<body>中增加代碼
<% Object[] result = null; MathClass ms = new MathClass(); result = ms.MathTest(1, 44, 11); %> <h2><%=result[0] %></h2>
部署web項目到Tomcat,這裏省略部署過程。
之後直接啓動Tomcat,訪問對應路徑:http://localhost:8080/matlabDraw/index.jsp
若訪問不出錯,有結果爲55,則輸出正確,測試成功。
B 若需要調用的爲作圖類型,則使用這個辦法。
在web項目,web-inf目錄下加入webfigures.tld標籤庫,文件在Matlab中有,MATLAB\R2012a\toolbox\javabuilder\webfigures
在jsp頁面引入A中的標籤除外,繼續增加
<%@ taglib prefix="wf" uri="/WEB-INF/webfigures.tld"%> <%@ page import="com.mathworks.toolbox.javabuilder.webfigures.WebFigure"%>
在web.xml中也請增加引入Webfigures,
<servlet> <servlet-name>WebFigures</servlet-name> <servlet-class> com.mathworks.toolbox.javabuilder.webfigures.WebFiguresServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>WebFigures</servlet-name> <url-pattern>/WebFigures/*</url-pattern> </servlet-mapping>
最後在頁面中加入如下標籤,獲取函數返回對象WebFigure,然後進行展示。
<wf:web-figure name="YourFigure" scope="session"/>