1.显示的步骤
前提是你已经能调用其中的jar包,并且图像已经弹出到界面上。
- 在matlab代码中添加
result=webfigure(f);
例如我的一个示例代码
function [result]=plotTest2()
x=0:0.1:1;
y=x+1;
f=figure();
plot(x,y);,
title('测试');
result=webfigure(f);
end
- 在WEB-INF下面添加webfigures.tld,webfigures.tld的位置在\MATLAB\R2013a\toolbox\javabuilder\webfigures\,添加完要干什么呢?直接添加的时会报错的,怎么解决呢?
uri和info顺序要调换! - 在生成的JSP文件下头部添加相应的引用项
- 在body部分添加<wf:web-figure root=“WebFigures” name=“MyFigure” scope=“session”/>
我的jsp页面如下:
<%@ page language="java" contentType="text/html charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ 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="plotTest2.PlotClass"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<wf:web-figure root="WebFigures" name="MyFigure" scope="session"/>
</body>
</html>>
2.我的创新
网上查到的大多是直接在JSP页面中直接书写的,要是自己想写的话,其实代码差距不大,重要的是要记得设置属性,然后跳转到上面的JSP就行了。
举一个我的Servlet的例子
package com.shine.test;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mathworks.toolbox.javabuilder.MWJavaObjectRef;
import com.mathworks.toolbox.javabuilder.webfigures.WebFigure;
import plotTest2.PlotClass;
/**
* Servlet implementation class WebFigureSer
*/
@WebServlet("/WebFigureSer")
public class WebFigureSer extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public WebFigureSer() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
Object[] a={};
Object[] argu ={"1","2"};
PlotClass plot = new PlotClass();
// Object result = plot.plotTest2(1)[0];
Class clazz=PlotClass.class;
Method m1=clazz.getDeclaredMethod("plotTest2",int.class,Object[].class );
Object c=clazz.newInstance();
Object result=m1.invoke(c,1,(Object)a);
//if (result instanceof Object[]){
// WebFigure wf = (WebFigure)
// ((MWJavaObjectRef)list.get(0)).get();
//}
WebFigure wf = (WebFigure)
((MWJavaObjectRef)Array.get(result,0)).get();
//WebFigure wf = (WebFigure)
// ((MWJavaObjectRef)Array.get(result, 0)).get();
request.getSession().setAttribute("MyFigure",wf);
request.getRequestDispatcher("/a.jsp").forward(request, response);
// System.out.println(wf);
}catch(ClassCastException e) {
System.out.println("Issue casting deployed components outputs to WebFigure");
}catch (Exception e) {
e.printStackTrace();
}finally {
//plot.dispose();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
如果用反射,会涉及到取数组元素的问题,即Array.get(result,0),详细参考https://blog.csdn.net/xd15010130025/article/details/89508406
参考
https://blog.csdn.net/a519986543/article/details/53555996
https://blog.csdn.net/hunterlew/article/details/49538773
https://blog.csdn.net/xd15010130025/article/details/89508406