【发布时间】:2015-01-02 09:40:17
【问题描述】:
我刚刚开始从 Java SE 过渡到 EE,我想知道以下问题的最佳实践。
我有一个想要在线发布的 Java SE 应用程序。 web/EE 部分已经设置了 Windows7/Apache Tomcat 和标准 servlet/JSP。对于 Java 应用程序来说,它实际上是一个相互依赖的源文件的集合。
我的计划是创建一个可执行的 .jar 文件,该文件将由 servlet 调用,输出流和过滤后的错误流将移交给在线用户。
我想到的因素是(按优先顺序):
- .jar 调用的开销
- 因此,虽然它是一种学术工具,但流量处理量很大
- 调用的安全性是结构化的用户输入,即 作为命令行参数传递给.jar(我说的是脚本 注入类型漏洞作为输入)
- Java 应用程序的模块化可能会经历多次修订,因此如果应用程序和 Web 应用程序之间存在更简单的耦合,我会采用它而不需要太多上述开销
所以我的问题是上述计划是否正确?还有其他人可以想到我应该关注的其他任何因素吗?
任何输入或指针将不胜感激!
编辑:: 所以以前我用 WIn7/Apache HTTP/PHP 完成了这个项目,其中 PHP 将使用用户输入生成一个唯一的文件名,并将其发送到 jar 程序,并使用 exec 函数调用和文件名作为命令行参数。该程序将生成一个类似命名的输出文件,PHP 将获取该输出文件的内容并将其返回给用户。问题是每个 exec 调用都会实例化一个新的 JVM 实例,如果这个站点有很多用户,服务器就会抓取/崩溃处理这些请求。这就是我迁移到本地 Java 服务器的原因。我在这里也有同样的想法,只是我希望将程序作为一个单元(jar),以便任何新的修订版都更容易部署。现在这是一个暂定计划。这就是为什么我的问题要求在这种情况下如何进行的最佳实践。
【问题讨论】:
-
听起来很疯狂。
-
@Christopher 我对 Java EE 完全陌生。这在我描述的环境中是不可能的吗?任何意见将不胜感激。
-
您的用例似乎没有意义:您想获取一个可执行的 JAR 文件并在单独的进程中运行它,但您想连接 servlet 的
InputStream(来自客户端)进入外部应用程序的stdin和外部应用程序的stdout并将其通过管道传输到servlet 的OutputStream(返回客户端)?这似乎是一个不应该存在的丑陋混乱。您是否尝试使用命令行程序并使其可在 Internet 上运行? -
@Christoper 我现在明白了。编辑以正确解释情况。
-
这是一个需要通过现代前端(您的 Web 应用程序)访问的遗留系统(您的命令行 java 程序)的完美示例。因此,对于提议的 Java EE JSF 应用程序,您将构建一个包含命令(例如按钮)并显示结果(例如文本区域)和相关处理程序类(CDI 组件)的视图,该处理程序类使用 JAR 中的逻辑无需通过文件系统,而是直接提供任何需要的参数,接收结果并将其显示在视图中。如果它长时间运行,则异步执行并轮询结果或通过网络套接字推送。
标签: java tomcat jakarta-ee design-patterns scalability