如何用java为现有的基于web的应用程序构建命令行界面

如何用java为现有的基于web的应用程序构建命令行界面,java,command-line,ejb,command-prompt,Java,Command Line,Ejb,Command Prompt,我使用JSP和servlet创建了一个基于web的应用程序,该应用程序使用SQL Server DB作为其后端 架构如下所示: 我的所有业务逻辑都保存在一个jar文件中 我已经使用JSP创建了我的视图,并且正在使用servlet与我的业务逻辑jar交互 jar连接到数据库以保存和补充信息,这些信息由我的servlet转发到JSP 我的web应用程序在远程Tomcat服务器上运行 现在,我得到了一个新的要求。我必须创建一个命令行界面,在这里我应该能够指定命令列表并点击enter(或者,创建一组命令

我使用JSP和servlet创建了一个基于web的应用程序,该应用程序使用SQL Server DB作为其后端

架构如下所示:

  • 我的所有业务逻辑都保存在一个jar文件中
  • 我已经使用JSP创建了我的视图,并且正在使用servlet与我的业务逻辑jar交互
  • jar连接到数据库以保存和补充信息,这些信息由我的servlet转发到JSP
  • 我的web应用程序在远程Tomcat服务器上运行

    现在,我得到了一个新的要求。我必须创建一个命令行界面,在这里我应该能够指定命令列表并点击enter(或者,创建一组命令并将其保存在.bat文件或其他文件中,然后运行),以便我的应用程序执行必要的操作。基本上,我必须创建一个命令行界面,它可以与我已有的GUI(JSP)一起使用

    我对这个完全陌生。谁能告诉我从哪里开始,如何开始

    非常感谢任何小小的帮助

    编辑 这就是我的web应用程序所做的。用户可以看到测试脚本列表(用SeleniumWebDriver编写)。他可以选择脚本,选择从何处运行脚本的主机,然后单击“运行”,然后在所述机器上执行测试

    现在,我想要一个命令行界面,它将消除对GUI的需要。比方说,我只是希望用户能够键入类似“executemyscript\u1”的命令,并且应该执行脚本

    测试脚本、selenium驱动程序以及所有内容都驻留在应用服务器上

    我的命令行界面应该能够在Windows命令提示符下工作


    谢谢。

    您说您的业务逻辑在一个罐子里

    为什么不以这个JAR作为依赖项启动另一个项目,并将其构建为一个可执行的JAR呢? 然后简单地使用System.in和System.out与用户交互

    编辑

    因此,您的应用程序是托管的。您是否有像REST、SOAP或任何其他API一样的API

    然后,您可以构建一个客户端,读取用户编写的字符串,对其进行解析,并在API中调用正确的服务。

    您使用的是Spring吗? 您能否指定CLI应该做什么

    你可以照托马斯说的做。 您也可以使用模板引擎,如Velocity。。形成输出。 使用一些JavaCurse,比如library,使您的输出。。。看起来不错

    正在指定命令。。。 陛下考虑一下您的业务逻辑,您到底向用户展示了什么。 记住webappui就是webappui。控制台ui是不同的。用户期望不同的行为

    所以命令像

    show goods category="for kids"
    
    那太好了。 也不要忘记不同的帮助命令 yourJarName.jar--help/-h等


    如果您希望以交互模式编写应用程序。。。想想那里的帮助命令。

    你看过Primefaces终端了吗

    我看到两种选择:

    • 创建客户端CLI以生成与服务器相同的数据 收到。换句话说,您不修改服务器代码,而是创建一个 客户端CLI模块(例如),用于解析命令行并发送 与实际GUI发送的内容完全相同
    • 在web应用程序中设置一个文本区域(装饰为CLI)以进行响应 在每次按下Enter键时,都会将行发送到服务器。在…上 在您的服务器上,您可以创建一个实用程序类(比如CLIParser.java) 实例),并用于解析接收到的命令, 验证它并运行它

      • 您的数据结构看起来很简单。您还提到,您设计应用程序时采用了业务逻辑与前端分离的方式

        在这种情况下,您可以考虑将业务逻辑暴露为基于REST的WebService。这应该不是很难,因为您的应用程序中有分层结构

        看起来有几种方法:

        • 列表脚本-返回可用脚本列表主机的列表
        • 返回可用主机运行脚本的列表(脚本名、主机地址)
        • 在地址为on的主机上运行脚本scriptName如果应用程序支持,则hostAddress可能会返回结果
        这三种方法看起来都是GET方法的最佳候选方法

        你可以考虑或另一个框架。 你可以为他们找到很多教程。举个例子

        从命令行应用程序中,您可以以不同的方式调用web服务。仅仅因为我大部分时间使用Jersey JAX-RS实现,我发现使用它最方便。您可以找到一个简短的教程,介绍如何使用Jersey客户端从命令行应用程序执行此操作。JBoss的框架中还包含一个完整的JAX-RS实现(也是完全认证的JAX-RS实现)。您甚至可以决定不使用任何客户端API,并使用HttpURLConnection手动完成所有工作,但我不建议这样做。对于简单服务,使用客户端API或使用HttpURLConnection手动完成所有工作没有太大区别,但是您永远不知道什么时候您的应用程序会变得不那么简单,因为您的客户端在开始时无法想到新的需求


        希望对您有所帮助

        您可以使用python创建CLI。到目前为止,我使用的python很容易实现CLI。谢谢@Shriram,但我不得不使用Java。你知道我如何用Java实现它吗?我不会投反对票,因为你的问题结构很好,但你必须更具体地说明这个CLI必须实现什么,因为现在它有点广泛。它将使用什么平台(Linux终端?Windows cmd?定制Java提示符?),这些命令将控制什么?@AlexisLeclerc,我已经编辑了我的问题。“请帮帮我。这就是我开始建造的,”托马斯说。但我被困在这里。比如说,当我运行命令1时,我的应用程序创建了一个类的对象,比如M