1. 程式人生 > >Java Web呼叫Matlab實現線上繪圖

Java Web呼叫Matlab實現線上繪圖

具體操作步驟如下:

一、利用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,出現結果。

參考部落格和文章: