Blender 3D渲染Java servlet接口

Blender 3D渲染Java servlet接口,java,servlets,render,blender,Java,Servlets,Render,Blender,我需要使3D渲染在服务器中的静态图像。有人建议我使用JavaServlet。我正在研究它的快速原型,我被卡住了 我应该如何在Java中调用Blender import java.io.*; import javax.servlet.http.*; @WebServlet("/HelloworldInServlet") public class HelloworldInServlet extends HttpServlet { protected void doGet(HttpServl

我需要使3D渲染在服务器中的静态图像。有人建议我使用JavaServlet。我正在研究它的快速原型,我被卡住了

我应该如何在Java中调用Blender

import java.io.*;
import javax.servlet.http.*;

@WebServlet("/HelloworldInServlet")
public class HelloworldInServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //Run Blender on server (localhost for now)
        // I need something here??
    }
}

我能想到的最简单的解决方案如下:

public class RenderSceneServlet extends HttpServlet {
    protected void doGet(HttServletRequest request, HttpServletResponse response) {
        String outputFile = "/path/to/output-file";

        // execute command to render a frame from scene.blend
        Runtime runtime = Runtime.getRuntime();
        Process exec = runtime.exec("blender -b scene.blend -o " + outputFile + " -F JPEG -x 1 -f 1");

        // wait for blender to finish
        exec.waitFor();

        // serve the rendered file
        File file = new File(outputFile);
        byte[] bytes = FileUtils.readFileToByteArray(file);
        response.setContentLength(bytes.length);
        response.setContentType("image/jpeg");
        response.getOutputStream().write(bytes);
    }
}
你应该记住几件事:

  • outputFile
    使用交替名称,否则每次并发请求都会覆盖该文件
  • 是apache commons io中的一个类
  • 我不太熟悉blender,因此命令行“blender-b scene.blend-o[…]”可能需要额外注意

at byte[]bytes=FileUtils.readFileToByteArray(文件);我得到java.lang.NoClassDefFoundError:org/apache/commons/io/FileUtils。我在buildpath和classpath中有.jar。一些研究告诉我,运行时和编译类路径可能不同。我应该如何解决它???@nelmMNT要么你把
commons io
jar放在你的servlet容器(=服务器)的lib文件夹中,要么你把它放在你的应用程序中的
WEB-INF/lib
@我让它工作了。谢谢现在我想使用request.getParameter(“场景”)来选择要渲染的3D场景。可能有5个输入参数。所以,将所有内容放在URL中可能是一个负担过重(GET)。我怎样才能邮寄呢??我研究了一下才发现。我应该在HTML中硬编码吗??提前感谢。请使用谷歌查找有关在servlet中处理表单数据的
教程。如果您的参数是“简单”值,如整数或短字符串,您可能应该坚持获取。使用GET,您可以提供诸如主机/HelloworldInServlet?scene=foo.blend&output=foo.jpg之类的链接,并且不需要表单或javascript来调用servlet。简单的GET方法可以工作。谢谢所以我假设,当我将Java代码放入服务器时,它会同时处理许多客户机请求。在需要许可证的服务器上运行的软件呢?Java线程是否生成并运行一个面向百万用户的软件?