Java 应用程序的 Web 用户界面

2022-09-03 14:21:21

我正在尝试为Java应用程序创建一个Web用户界面。用户界面将非常简单,由一个页面组成,其中包含一个表单供用户提出查询,以及一个结果页面 - 有点像Google的搜索引擎或 Ask.com。

我对Java的基本API非常熟悉,但我在将Java用于Web环境方面没有太多经验(尽管我使用过 ASP.NET),所以我正在寻找一些建议:

  • 我应该使用什么 Web 应用程序服务器请注意,我的界面非常轻巧,我只想要一些快速,易于启动/重置/停止和(重新)部署我的应用程序的东西。另外,我需要它在多种环境中工作,即GNU / Linux,Mac OS X和Windows XP / Vista。此外,我正在使用 和 ,因此,如果您可以轻松地为服务器管理添加一些目标和/或使用IDE管理服务器,那就太好了。我研究过TomcatJetty,后者似乎非常轻巧,易于安装和部署。这是理想的,因为 GUI 仅用于演示目的,我可能需要将其部署在不同的计算机中。然而,Tomcat已经存在了很长时间,它似乎更加成熟。antEclipseant

  • 至于网页,Java Server Pages看起来很合适,因为它们对于我试图完成的事情(处理表单并输出结果)来说似乎足够简单,但我都听不见建议。

  • 我还有另一个要求,它要求我解释应用程序的“基本”工作流程:基本上,我有一个类,它有一个方法,该方法将处理用户的输入并返回结果进行显示。此类是应用程序的核心。现在,我只想实例化这个类,因为它需要大量的内存,并且需要很长时间才能启动,所以我想在应用程序/服务器启动时创建它,并为应用程序的整个跨度存储该引用(即,直到我停止服务器)。然后,对于每个用户请求,我只需调用实例的方法,并显示其结果。如何在Java中实现这一点?Enginerun(String)runEngine


答案 1
  1. 应用服务器。你认为Tomcat在运行时占用空间,学习量或...方面很重?我倾向于选择与IDE完美集成的东西。因此,Eclipse + Tomcat或Apache Geronimo,也许在它的WebSphere Community Edition伪装下可以完成这项工作。据我所知,这些已经足以满足你的需求,而且学习曲线确实很容易管理。
  2. 是的,JSP。您可能会发现您的演示需求变得更加复杂。去JSF的额外努力可能会得到回报 - 像日期选择器这样的漂亮小部件。
  3. 在你的处理中,你将有一个 servlet(或者一个操作类,如果你使用的是 JSF),该类可以有一个 Engine 类型的成员变量,该变量在启动时初始化,然后用于每个请求。要记住的是,许多用户会同时点击该servlet,从而访问该引擎。您的发动机可以安全地同时从多个线程使用吗?

在这一点上展开。在实现 JSP 时,有两种模型被称为(具有一定的创造性)模型 1 和模型 2。请参阅此说明

在模型 1 中,您倾向于将代码直接放入 JSP 中,它充当控制器角色。Persoanlly,即使在处理小型,快速开发的应用程序时,我也不会这样做。我总是使用模型2。但是,如果您选择,则可以在JSP中放入一些Java。

<%  MyWorker theWorker = MyWorkerFactory.getWorker();
    // theWorker.work();
%>

我赞成有一个这样的工厂,这样你就可以控制工人的创造。工厂会有类似的东西(举一个非常简单的例子)

private static MyWorker s_worker = new MyWorker();
public static synchronized getWorker() {
       return s_worker;
}

或者,您可以在首次调用该方法时创建工作线程。

在模型2的情况下,您自然会有一个servlet,您将在其中放入一些代码,因此您可以拥有

private MyWorker m_worker = MyWorkerFactory.getWorker();

这将在加载 servlet 时初始化。无需担心将其设置为在启动时加载,您只需知道它将在运行第一个请求之前进行初始化。更好的是,使用 servlet 的 init() 方法。这保证在处理任何请求之前被调用,并且是用于此类工作的 servlet API 架构位置。

public class EngineServlet extends HttpServlet {

private Engine engine;

// init is the "official" place for initialisation
public void init(ServletConfig config) throws ServletException {
     super.init(config);
     engine = new Engine();
} 

答案 2

您需要学习的技术是 Sun Java Servlet 规范,因为这是所有重要的 Java Web 服务器实现的。这使您能够编写可以执行服务器端所需的所有操作的 servlet。然后,您可以针对与 iDe 配合良好的任何容器进行开发,并部署在生产中运行良好的任何其他容器上。

你还需要学习基本的HTML,否则你需要学习JavaServer Faces或类似的东西,这是一个相当大的嘴巴,以创建你需要的提交按钮与HTML表单中的其他条目。

为了让你的引擎工作,你可以在web.xml中创建一个带有单例的servlet,然后你可以调用它。绝对确定它是线程安全的,否则你会有很多痛苦。对于初学者,你可以声明你的调用 servlet 同步,以确保在任何时候最多有一次 run() 调用处于活动状态。