小编典典

Java应用程序的Web用户界面

jsp

我正在尝试为Java应用程序创建Web用户界面。用户界面将非常简单,包括一个页面和一个结果页面,结果页面类似于Google的搜索引擎或Ask.com

我对Java的基本API相当熟悉,但是我没有在Web环境中使用Java的丰富经验(尽管我使用过ASP.NET),所以我在寻找一些建议:

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

  • 至于 网页 ,Java Server Pages看起来很合适,因为对于我要完成的工作(处理表单并输出结果)来说,它们似乎足够简单,但是我全都愿意提出建议。

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



阅读 423

收藏
2020-06-08

共1个答案

小编典典

  1. 应用服务器。您认为Tomcat在运行时占用空间,学习量或…方面都是沉重的负担?我倾向于选择与IDE具有良好集成的东西。因此,Eclipse + Tomcat或Apache Geronimo(也许是WebSphere Community Edition的幌子)可以完成这项工作。从我所看到的来看,这些足以满足您的需求,而且学习曲线确实很容易管理。
  2. 是的,JSP。您可能仍然发现演示文稿的需求变得更加复杂。使用JSF所做的额外努力可能还没有得到回报-诸如日期选择器之类的精美小部件。
  3. 在您的处理过程中,您将拥有一个servlet(如果您使用的是JSF,则为一个动作类),该类可以在启动时初始化类型为Engine的成员变量,然后将其用于每个请求。要记住的是,许多用户将同时访问该servlet和该引擎。是否可以安全地同时在多个线程中使用您的引擎?

在这一点上要扩大。在实现JSP时,有两个模型(有些发明)称为模型1和模型2。请参见此说明

在模型1的情况下,您倾向于将代码直接放入JSP中,它充当控制器角色。坦率地说,即使是在处理小型,快速开发的应用程序时,我也不是这样。我始终使用模型2。但是,如果您选择将Java放入JSP中,则可以使用它。

<%  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();
}
2020-06-08