在 Web 服务器上运行 Java

11

我编写了一个独立的Java应用程序,并将其打包成一个jar文件,该文件接受一些命令行参数,进行一些硬核计算,然后将结果与一些指向结果文件的默认输出流输出到文件中。

现在我想在这项技术周围创建一个网站。想法是用户可以填写一个html表单,将其发布到网页上,然后调用Java应用程序,解析Java应用程序的结果,并将其显示给用户。

目前,我正在使用一些PHP来收集来自POST请求的数据,然后只需使用exec调用:

java -jar -Xmx128m myapplication.jar command-line-arguments

这个方法好吗?

我每天都有几千次访问我的网站,每次执行Java应用程序可能需要30秒到1分钟左右,因此我不希望过度浪费时间。似乎有比直接调用Java更好的解决方案。

我一直听到诸如java servlets、bean、tomcat、glassfish等内容,但我不知道它们是什么以及它们如何使我受益。它们能为我带来什么好处?由于不必每次运行应用程序时都创建Java JVM,速度更快?内存使用更少?显然,我希望尽可能快地运行并占用尽可能少的内存空间。

那么,我应该采取什么最佳方法呢?我不想对我的应用程序进行任何严重的重写,因为有很多代码(因此重写为C或C++是行不通的)。


谢谢。

5个回答

12

Servlet是一种小型应用程序,旨在运行在容器内。它们为您提供了一个扩展点,可以将Java代码插入到简单的servlet容器(如Tomcat)或更完整的应用程序服务器(如GlassFish)中。您希望这样做是因为应用程序服务器会处理HTTP交互和提供其他功能,例如安全性、日志记录、会话管理、错误处理等(请参阅servlet规范)。

当您将应用程序放置在应用程序容器中(具有所有其他额外功能的Web服务器)时,您还可以更好地管理应用程序的生命周期。您将能够启动和停止应用程序而不必关闭Web服务器,重新部署,启动更多实例等。此外,当您想要制作第二个应用程序时,只需轻松将其放置在第一个应用程序旁边即可。或者,您可以将多台计算机集群在一起,以获得易于冗余和负载平衡的应用程序服务器功能。

这只是一个开始,还有许多其他功能、技术和框架可帮助您创建基于容器的应用程序。Servlet教程


2

[这些操作能让我] "更快的结果,因为Java JVM不需要在每次运行应用程序时创建?"

是的。

而且 - 奖励 - 您可以替换PHP,使您的整个网站都使用一种语言:Java。

此外,您可以考虑修改用例,使其不是一次痛苦的30-60秒,而是一系列与用户交互执行的更快步骤。


2

在servlet容器中运行您的代码。

假设您需要将网站保留为PHP,并且已经在计算机上安装了Java,则只需安装免费的servlet容器(例如Apache Tomcat或Jetty)。配置以在未使用的端口上运行servlet容器。 (默认情况下为8080)。

这些servlet容器实际上是基于Java的Web服务器,就像Apache一样,但专门用于提供Java代码。

使用Java Web服务器而不是每个请求的新java.exe调用的最明显的优点是,您的Java虚拟机(jvm)将始终“热”,运行并运行。每次启动java.exe(jvm)都会浪费那些额外的几秒钟。

使用servlet容器的第二个优点是,容器将使您的代码在jvm内的新线程中运行,用于每个新请求。如果您启动数百个Java实例而不是一个实例,则很可能会导致计算机崩溃。

将您的代码放入servlet中。即使对于新手来说也非常容易。您将通过HTTP与servlet进行交互(通过servlet的doGet或doPost方法)。将php请求表单传递给此servlet,并让servlet返回任何内容:页面、json对象、xml或纯文本。


0

你可能不想直接从网站调用Java应用程序。就像你所说的,如果Java进程需要30秒才能运行,你的Web服务器会变得非常拥挤,特别是如果你的网站正在遭受攻击。

你可能需要研究一下Web服务(可能还有消息队列)来分派后端处理请求。PHP页面可以调用服务器上的Web服务,然后将处理请求放入队列中,或以异步方式启动Java应用程序。你不希望HTTP请求等待Java应用程序完成,因为在处理过程中,用户将只能看到挂起的浏览器,并且HTTP请求可能会超时。

一旦Java应用程序完成,它可以更新数据库表,用户可以从网站访问该表。


0

最简单的开始方法是在你的应用程序中嵌入一个Web服务器。看一下Jetty


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接