【问题标题】:calling stand alone java application from a java servlet从 java servlet 调用独立的 java 应用程序
【发布时间】:2015-05-29 17:20:52
【问题描述】:

我是 Java 新手。我一直在尝试做一些 Java 应用程序开发。

  1. 我创建了一个独立的 Java 应用程序。它是一个基本的计算器应用程序,可以执行加法、减法、乘法和除法等基本操作。它是使用 Java swings 和 AWT 开发的。它的 GUI

  2. 我有一个 Java servlet 应用程序,它接受用户的两个输入(数字)并返回结果。基本上,无论基本计算器做什么,servlet 都可以对数字进行此类操作,并将结果返回给作为 Web 浏览器的客户端。 (客户端只是一个 HTML 文件)

我想调用(从 servlet)独立应用程序来执行操作并将结果返回给 servlet,而不是 servlet 执行操作。然后 servlet 将结果返回给客户端。是否可以从 servlet 调用独立的 java 应用程序。如果是,有什么不同的方法?

【问题讨论】:

  • 你所描述的没有多大意义。我不会从 servlet 调用您的 GUI 应用程序来进行基本计算,而是使用一个可以执行所有这些操作的库,并在 servlet 和 GUI 应用程序中使用这个库来解决这些操作。另一方面,如果您仍然想这样做,则必须在服务器端使用ProcessBuilder调用GUI应用程序,读取结果的输出流或使用Robot操作GUI并获取结果然后在你的 servlet 中使用它。

标签: java swing servlets


【解决方案1】:

要调用您的应用程序,您必须根据您的操作系统编写 bat 或 sh 文件。 -- 使用 processbuilder 调用命令 -- 示例代码符合您的要求

if (osname.indexOf("nux") >= 0 || osname.indexOf("nix") >= 0) 
                {
                    //for sending  request to sh file
                    filePath = request.getSession().getServletContext().getRealPath("")+"/WEB-INF/classes/";
                    cmdList.add("sh");
                    cmdList.add("callDesktopApp.sh");
                    cmdList.add(path);
                    }
                else
                {
                    // for windows
                    String jrePath="";
                    String f="C:/Windows/SysWOW64";
                    if(new File(f).exists())
                    {
                        jrePath="C:\\Program Files (x86)\\Java\\jre6\\bin\\java";
                        jrePath="\""+jrePath+"\"";
                    }
                    else 
                    {
                        jrePath="C:\\Program Files\\Java\\jre6\\bin\\java";
                        jrePath="\""+jrePath+"\"";
                    }
                    filePath = request.getSession().getServletContext().getRealPath("")+"\\WEB-INF\\classes\\";
                cmdList.add("cmd");
                    cmdList.add("/c");
                    cmdList.add("callDesktopApp.bat");
                    cmdList.add(path);
                    cmdList.add(jrePath);
                }   

                pb=new ProcessBuilder(cmdList);

                pb.directory(new File(filePath));
                process = pb.start();

                //Read out dir output
                InputStream is = process.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
                br.close();
                is.close();
                isr.close();

            }

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多