---文章比较啰嗦----是我的分析过程-----请大家选择性挑选自己需要的部分看参考---

-----还有我只涉及java在后端调用matlab的过程,不涉及前端

----经验总结:

(1)我用的是R2018a,java是1.8的,就是用网上的普通破解方法破解之后就可以直接用

---有很多博客说java,要1.7---no----matlab现在可以兼容到1.8了

---有一些文章说,要完全破解,我找了很久的完全破解的文件,没有R2018a的,然后我直接跑就通过了

----总结,如果你是R2018a,java是1.8的,不用再折腾了,很有可能现在就能用了

(2)剩下的操作步骤,我是借鉴一个博客写的

https://blog.csdn.net/lan_yu22/article/details/81269890

(给无私的大佬鼓掌...)

按照这个生成jar包,然后把这个包和javabuilder的包都配置到java web 环境中~

然后web项目中添加一个类,来调用这个函数,我依旧是照着上面哪个博客写的,但是有一个地方

Object result[] = test. test_connection (1 ,11);

请看上面这行,是我改之后的调用matlab函数的部分,我写的matlab函数是

function [outputArg1] = test_connection(x)
outputArg1 = x+1;
end

所以为什么 我的m函数只需要一个输入参数,而我要在java调用的时候写两个参数呢??

emm,经过笨蛋式测试,我发现第一个参数是来指定输出参数的个数的。。。

比如我把 第一个参数改成2的时候,eclipse会提示我 “输出参数过多”

还有为什么输出只有一个还有用 result[ ]来接收结果,然后用result[0]来输出结果呢??

emm,经过测试,当我直接用result接收并输出时,eclipse会输出:“[Ljava.lang.Object;@5e8c92f4”  (大概是地址??)

反正就是老老实实 按照样例写啦

然后最后我这里是可以正常运行的~~

然后最后附上我测试的完整的java代码把

 import com.mathworks.toolbox.javabuilder.MWException;//这个是我们导入的javabuilder的工具包import test_connection.Class1;//这个是我们导入的matlab代码生成的工具包
public class test_connetction {public static void main(String[] args) {try {Class1 test = new Class1();Object result= test. test_connection (1 ,11);System.out.println((int)result);} catch (MWException e) {e.printStackTrace();}}}

而且百分百确定能跑:

------好了,看到这里,你就可以自己操作了,下述的文字都是废话(千万别看,浪费时间)-------

java调用matlab 主要基于 matlab安装后文件中toolbox中的javaBuilder。

贴心的开发人员已经把例子写出来咯...

我主要是开发java Web,---->java_Web_vararg_demo

文件结构如下

(额...忽略红色错误)

首先分析---有三个部分:

1.前端jsp,html文件:只包括向java后端传递参数的部分,没有直接接触matlab

(主要用session的setAttribute()方法来向后端传递数据)

2.java代码:---一段一段来分析-----

package VarArg;import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;// Necessary package imports for using ML component
import com.mathworks.toolbox.javabuilder.*;
import com.mathworks.toolbox.javabuilder.webfigures.*;
import com.mathworks.toolbox.javabuilder.web.MWHttpSessionBinder;
// ml created component
import vararg_java.*;

----注意需要导入的包~~~  初步判断导入 javabuilder.jar到自己的项目中就ok了

    vararg_javaclass fComponentInstance = null;public void init() throws ServletException{if(fComponentInstance == null){try{fComponentInstance = new vararg_javaclass();}catch (Throwable t){t.printStackTrace();}}}public void destroy(){if(fComponentInstance != null)fComponentInstance.dispose();}

----定义初始化和清除的函数,大概可以直接套用,I guess .....

下面一个函数一个函数来分析

 protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{Object[] outputArray = null;FormData formData    = extractDatafromForm(request);WebFigure wb;if ( !formData.valid() ){printHTMLError(response);return;}try{outputArray = fComponentInstance.varargexample(formData.getVarOutputs(),formData.getDataArray(), formData.getVarInputs() );wb          = (WebFigure)MWJavaObjectRef.unwrapJavaObjectRefs(outputArray[0]);// Set the figure scope to sessionrequest.getSession().setAttribute("Vararg_Figure",wb);// Bind the figure's lifetime to sessionrequest.getSession().setAttribute("Vararg_Figure_Binder", new MWHttpSessionBinder(wb));printHTMLOutput(request,response,wb,outputArray);// You can use the viewer (view.jsp) by uncommenting the following code and commenting the call to// printHTMLOutput(request,response).// updateSession(request.getSession(),outputArray);// RequestDispatcher dispatcher = request.getRequestDispatcher("/view.jsp");// dispatcher.forward(request, response);}catch(Throwable t){t.printStackTrace();}finally{MWArray.disposeArray(outputArray);}}

这个函数,是对于前端传来的数据进行接收,然后经过处理后又传输到前端,所以我们提取出来,将接收到的数据进行处理的部分,如下:

        Object[] outputArray = null;FormData formData    = extractDatafromForm(request);WebFigure wb;outputArray = fComponentInstance.varargexample(formData.getVarOutputs(),formData.getDataArray(), formData.getVarInputs() );wb          = (WebFigure)MWJavaObjectRef.unwrapJavaObjectRefs(outputArray[0]);

----这个部分应该就是java调用matlab 的代码,重点做标记!!!!!

接着分析:

后面的函数 ....根据名字就可以判断和调用matlab无关了...

下面是这个样例调用的matlab函数。

function [w_fig, varargout] = varargexample(Data, varargin)
% VARARGEXAMPLE used varargin and varargout for demonstration purposes
%
%   The purpose of VARARGEXAMPLE is to demonstrate integration of MATLAB
%   created components using varargin and varargout. It also demonstrates
%   the use of webfigures for embedding MATLAB graphics in web pages.
%
%   The function VARARGEXAMPLE takes one required input, the data to plot.
%   The function then takes a variable number of token value pairs.  These
%   pairs set properties of the figure and plot to be created.%   Syntax:
%       varargexample(Data)
%       varargexample(Data, PropertyName, PropertyValue, ...)

所以就是java代码里通过 fComponentInstance调用了这个matlab的函数完成了对接。

??提出问题:那么matlab是把这个函数文件打包成jar包了么??

emm所以应该不是?

关于JAVA WEb如何连接Matlab相关推荐

  1. Java web 服务器连接MySQL数据库代码

    文章目录 前言 一,建立工程 二,导入jar包 三,编写DataBase类实现连接数据库与操作数据库 四,效果图 参考文章 前言 经过前面的环境部署,今天我们终于可以来连接数据库了.参考我之前的文章. ...

  2. Java Web ConnectionPool (连接池技术)

    根目录下: dbpool.properties 代码: driverClassName=oracle.jdbc.driver.OracleDriverusername=scottpassword=ti ...

  3. java web tcp长连接超时时间_常用java web容器http长连接超时设置

    1.http长连接相关知识 http长连接对我们来说并不陌生,但长连接并不是永远不会关闭.对于HTTP长连接需要注意下面几点:keepalive_timeout指的是web服务器发送完最后一个响应报文 ...

  4. java web access_Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  5. Java web连接数据库实现登录功能 ; jsp连接MySQL或SQL server数据库的jar包也在这里哦!

    [深夜放毒,记录生活^_^]   学了HTML之后 , 一直想写一个能够实现登录功能的小网页 ,终于--现在开始学习数据库,经过查阅资料,创建了很简单的一个java web小项目来实现登陆操作,界面不 ...

  6. druid连接池jar包_我的Java Web之路56 - MyBatis使用第三方数据源(比如Druid)

    本系列文章旨在记录和总结自己在Java Web开发之路上的知识点.经验.问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人. 目录 介绍 继承UnpooledDataSourceF ...

  7. java web ubuntu_Ubuntu部署Java web项目

    登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update                     更新软件列表 输入: ...

  8. java web开发初学_2018年学习Web开发的绝对初学者指南

    java web开发初学 This post was originally published on Coder-Coder.com. 该帖子最初发布在Coder-Coder.com上 . If yo ...

  9. Java web 环境搭建-Linux

    文章目录 一.初识 Tomcat 二.Java web 环境:Nginx+JDK+Tomcat+MySQL 三.环境部署流程 3.1 安装 JDK(java 解析器) 3.1.1 首先安装 gcc 3 ...

  10. java 关闭oracle连接_Java应用中Oracle连接不关闭

    在一些不使用连接池的较老的Java Web应用程序中,我有一个连接泄漏. 查找泄漏很困难,因为它不会授予我访问v$session的权限 SELECT Count(*) FROM v$session; ...

最新文章

  1. SerialPort实现对串口COM的操作(有些纠结)
  2. js 为什么0.1+0.2不等于0.3
  3. 够学习一辈子的生活经典
  4. HBase BlockCache系列 - 探求BlockCache实现机制
  5. php检测表大小,查询mysql数据库、表的大小
  6. 当当购书双十一钜惠,5折封顶!附图灵人工智能书单
  7. C语言 关键字const的作用
  8. Phpcms V9全站伪静态设置方法
  9. PDF超过6000页,OMG,学它
  10. excel文件打不开怎么办_电脑设备管理器打不开怎么办
  11. LeetCode.83. Remove Duplicates from Sorted List(删除单链表中的重复元素)
  12. 【Gym-101775 J】Straight Master【差分、贪心】
  13. error:This Android SDK requires Andr...ate ADT to the latest version.
  14. 谷歌浏览器安装插件的方法步骤
  15. 7z解压软件(小巧好用)。百度云下载链接
  16. 计算机 国际顶尖级会议排名,计算机学科国际会议排名
  17. debian10上安装samba服务器
  18. SEO教程:网站优化时站内优化应该怎么做?
  19. 波浪动力滑翔机的综述
  20. 决策树常见的面试点整理

热门文章

  1. 【论文笔记】Graph U-Nets
  2. 如何实现 1 小时内完成千万级数据运算
  3. 恭贺德林教点穴网成立
  4. 洞道干燥及计算机控制实验报告,洞道干燥实验思考题
  5. 计算机加法的运算规则,计算机眼中的加法运算
  6. java 调用 yed 绘制 流程图_用 yEd Graph Editor 绘制流程图(2)
  7. 中景园2.4寸TFT显示屏取模方式
  8. 【VBA研究】智力游戏-蓝色方块
  9. 【Swift】文档分享到其他应用
  10. 《30岁前每一天》 读书心得体会