Java Web呼叫Matlab實現線上繪圖
阿新 • • 發佈:2018-12-16
具體操作步驟如下:
一、利用Matlab編譯jar包
(一)軟體準備:
1、本機安裝Matlab2014b win64
2、JDK1.7。據網上文章說,1.8還沒有被Matlab2014b支援,但是沒有試過。
(二)步驟:
1、編寫matlab繪圖函式
比如
function [result,out] = drawplotNew( n, m) x=zeros(100,100); x(1:50,1:50)=1; x(51:100,51:100)=1; out = x; f = figure('Visible','off'); imshow(x); result = webfigure(f); %將Figure轉換為WebFigure並返回 end
形成drawplotNew.m檔案。程式碼中需要注意的:一是結果一定要呼叫webfigure將圖形返回;二是生成的figure最好隱藏,不然伺服器端會出現一個Matlab的繪圖視窗。
2、利用Matlab的deploytool中的Library Compiler工具將m檔案打包為jar包
在matlab的命令列輸入:
deploytool
彈出介面為:
選擇Library Compiler,開啟介面
然後等待打包完畢
完成
這個時候會生成以下的目錄結構
箭頭所指的資料夾中的jar包就是要用到的Matlab模組,比如drawplotNew.jar
二、部署
1、將上面生成的drawplotNew.jar拷貝到自己網站的WEB-INF\lib目錄下和tomcat的lib目錄下
2、將javabuilder.jar(位置在matlab安裝目錄的下的toolbox\javabuilder中,如F:\Program Files\MATLAB\R2014b\toolbox\javabuilder\jar\javabuilder.jar)拷貝到自己網站的WEB-INF\lib目錄下和tomcat的lib目錄下
3、拷貝webfigures.tld檔案(位置在matlab安裝目錄的下的toolbox\javabuilder\webfitures中,如F:\Program Files\MATLAB\R2014b\toolbox\javabuilder\webfigures\webfigures.tld),拷貝到自己網站的WEB-INF目錄下,與web.xml一起
三、程式碼修改與測試
1、修改要顯示繪圖的JSP檔案
<!-->
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib
prefix="wf"
uri="/WEB-INF/webfigures.tld"
%>
<!-- 這一段是匯入的自定義標籤和類的申明 -->
<%@ page import="com.mathworks.toolbox.javabuilder.webfigures.WebFigure"%>
<%@ page import="com.mathworks.toolbox.javabuilder.*"%>
<%@ page import="com.mathworks.toolbox.javabuilder.internal.*"%>
<%@ page import="drawplot.Class1"%>
<!-- -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>
<body>
<h1>Test</h1>
<!-- 呼叫程式碼生成圖形,並將圖形內容賦給自定義標籤 -->
<%
Class1 plot = null;
plot = new Class1();
try{
Object[] result = plot.drawplot(1, 0.0f, 0.01f, 10*Math.PI);
WebFigure wf = (WebFigure)MWJavaObjectRef.unwrapJavaObjectRefs(result[0]);
request.getSession().setAttribute("MyFigure",wf);
}
catch(ClassCastException e) {
throw new Exception ("Issue casting deployed components outputs to WebFigure", e);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
plot.dispose();
}
%>
<!-- -->
<!-- 自定義標籤的HTML程式碼 -->
<wf:web-figure name="MyFigure" scope="session" />
<!-- -->
</body>
</html>
具體流程就是,申明匯入的java類,利用java類實現繪圖,並將繪圖結果輸出到web-figure標籤,用web-figure標籤來控制圖形在頁面顯示的位置。
2、測試
啟動網站,訪問對應的jsp,出現結果。
參考部落格和文章: