java - Java 应用程序的 Web 用户界面

标签 java jsp tomcat jetty application-server

我正在尝试为 Java 应用程序创建网络用户界面。用户界面将非常简单,由一个页面组成,该页面带有供用户提出查询的表单和一个结果页面——有点像谷歌的搜索引擎或 Ask.com。

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

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

  • 至于网页,Java Server Pages 看起来很合适,因为它们对于我要完成的任务(处理表单和输出结果)来说似乎足够简单,但我很乐意听取建议。

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

最佳答案

  1. 应用服务器。您认为 Tomcat 在运行时足迹、学习量或……方面很重?我倾向于选择与 IDE 建立良好集成的东西。所以 Eclipse + Tomcat 或 Apache Geronimo,也许在它的 WebSphere Community Edition 中伪装会做的工作。据我所知,这些足以满足您的需求,而且学习曲线非常易于管理。
  2. 是 JSP。您可能会发现您的演示需求变得有点复杂。使用 JSF 的额外努力可能会得到返回 - 不错的小部件,例如日期选择器。
  3. 在您的处理过程中,您将有一个 servlet(如果您使用的是 JSF,则为一个 Action 类),该类可以有一个 Engine 类型的成员变量,该变量在启动时初始化,然后用于每个请求。需要牢记的是,许多用户会同时访问该 servlet 和该引擎。您的引擎可以同时从多个线程使用吗?

在这一点上展开。在实现 JSP 时,有两个模型(具有一些创造性)称为模型 1 和模型 2。参见 this explanation。 .

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

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

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

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

或者,您可以在首次调用该方法时创建 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();
} 

关于java - Java 应用程序的 Web 用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283468/

相关文章:

linux - tomcat访问日志获取我的eth0 ip?

java - 无法在 pivotal tc server 3.2 中运行项目

java - LineLength 和 JavadocMethod 的 Checkstyle 错误

java - 在ajax中调用java方法

php - 是否可以在我的 droplet 上同时运行 PHP 和 JSP

java - 使用 Controller 在 jsp 上显示错误消息

java - 如何在 Tomcat 而不是 jettyserver 上运行 broadleaf ..?

java - 在 Java 或 Google Guava 中具有弱值的简单线程安全 Java HashMap ?

java - 通过外部事件退出 while 循环

Java:wait()、notify() 和嵌套同步块(synchronized block)