我试图建立一个网络用户界面为一个Java应用程序。用户接口将是非常简单,组成一个单页的一种形式的用户构成对他们的查询,结果页--排序的谷歌等搜索引擎或Ask.com.

我相当熟悉的基API of Java,但我没有太多的经验,在使用Java网环境中的(虽然我用的ASP.NET),所以我在寻找一些建议:

  • 什么样的 网络应用服务器 我应该使用? 注意到,我的接口是很轻的,我只是想要的东西,这是快速、方便地启动/重启动/停止和(重新)部署我的应用程序。此外,我需要这工作 多个环境, ,即,GNU/Linux,Mac OS X,and Windows XP/Vista。此外,我在使用 antEclipse, ,因此这将是巨大的,如果我可以很容易地添加一些 ant 目标服务器管理和/或管理的服务器使用的环境。我已经看到 Tomcat码头, 后者似乎是非常轻而易于安装和部署。这是理想的,因为GUI只是为了示范的目的,并且我可能会需要部署它在不同的计算机。然而,Tomcat已经存在了很长时间,而且它似乎更加成熟。

  • 作为 网页, Java服务器网页看起来像一个良好的配合,因为它们似乎足够简单的为什么我要完成的(处理一种形式和输出结果),但是我耳朵的建议。

  • 我还有另一个要求,这需要我解释一下"基本的"工作流程应用程序:基本上,我有一个类 Engine 其中有一个方法 run(String) 这将过程用户的输入和返回的结果显示。此类是的 核心 该应用程序。现在,我想 实例 此类 只有一次, ,因为它需要一个 很多 存储器,并且需要很长的时间才能启动,所以我想创建它时,应用程序服务器开始,并储存引用的整个范围的应用程序(即,直到我停止服务器)。然后,为每个用户的要求,我想简单地援引的 run 方法 Engine 实例,并显示其结果。 这怎么能完成Java?

有帮助吗?

解决方案

  1. 应用程序服务器。你看到Tomcat重在条款的运行排放,或者数量的学习或...?我会倾向于选择一些具有良好建立一体化与环境。因此蚀+Tomcat或Apache Geronimo,也许在它的 WebSphere社会版 幌子将做的工作。从我所看到的这些都足以为你想要什么,并且学习曲线都是真的相当易于管理。
  2. 是的Jsp。你可能还没有找到,你介绍的需求成为一个稍微更加复杂。额外的努力的要JSF可能尚未支付-好的部件,例如日期采摘。
  3. 在你处理你将有一个servlet(或类行动如果您使用的JSF)这类可以有一个成员可变的种类型发动机的初始化的启动和随后用于每一个要求。要牢记的是,许多用户将打servlet,因此,发动机的同时。是你的发动机的安全,可以用于从一个线在同一时间?

扩大在这一点上。在实现Jsp,有两种模式称为(一些创造性)作为模型1和模型2中。看看 这个解释.

在这种情况的模型1你倾向于把代码直接进入JSP,它的作用在一个控制器的作用。Persoanlly,甚至在处理小,迅速开发的应用程序,我不那么这一点。我总是用模型2中。但是如果你选择你可以把一些Java到你JSP。

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

我woudl赞成有一个工厂,像这样就可以控制的设立工作人员。工厂会有什么样(得到一个很简单的例子)

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

或者你可以创建工作时,方法是第一个呼吁。

在这种情况的模型2的你当然有一个servlet到这你要把一些代码,这样你就可以有

private MyWorker m_worker = MyWorkerFactory.getWorker();

这将被初始化时servlet。不需要担心的设置负荷的启动,你只知道它将initialsed之前的第一个要求是运行。更好的是,使用init()方法的servlet。这是保证被称之前的任何请求进行处理,并且是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 Servlet规范,因为这是什么所有不重要的java网络服务器实现的。这使你写servlet它可以做所有的事情你需要服务器的一侧。然后可以制定针对任何容器的工作以及与iDe,并部署上的任何其他容器的工作以及在生产。

你也需要学习基本HTML为你否则将需要学习一次面临着或者类似这是一个相当大的mouthfull创建提交按钮你需要与其他条目中HTML形式。

对于你的发动机的工作,你可以创建一个servlet与单web.xml,然后你就可以调用。绝对肯定这是线的安全,否则你会有很多的痛苦。对于初学者来说你可以宣布你调用servlet同步,以确保至多一个呼叫的运行()活动是在任何时间。

编辑:迄今为止,我已经决定如下:

  • 网络应用服务器: 码头;
  • Java服务器网页 对的意见;
  • 基于该建议的@djna,我读过一些文章有关 模式2, 和我想出了这个解决方案(其中我没有测试但是,因为我需要完成我的应用程序之前移动进入接口):

形式。jsp

<form action="/servlet/EngineServlet" method="GET">
  <input type="text" name="text" />
</form>

EngineServlet.java

public class EngineServlet extends HttpServlet {
  private Engine engine = new Engine(); 
  // does this make sure engine only gets instantiated one time in the entire lifespan of the web application; from what I've read from the servlet lifecycle, it seems like it, but I'd like to hear opinions

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response) {
    String text = request.getParameter("text");
    ResultBean result = engine.run(text);
    request.setAttribute("result", result);
    RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
    dispatcher.forward(request, response); 
    // what's the difference between forward, and request.sendRedirect() ?
  }    
}

结果。jsp

<div>The result was: ${result.text}</div>

什么你认为这个解决方案吗?任何问题,可能不明显的人来自J2SE的背景吗?我还写了一些疑虑,我在代码注释。谢谢。

假设这不是一个应用而不需要任何种类的更新/维护,在未来,我会推荐你做的查看层 Apache检票 由于以下原因(阅读短infoblurb从第一页):

  • 由于检票口分隔的观层和工作层模型的软,在一个干净的方式,它可以很容易地解释这一观点是完全分离,剩余的应用程序和检票口就是 IModel口 用于链接的数据来自控制层的图层在一个可靠的方式。因此,你的控制器层也许一个单一的应用程序的单只要你使用这种方式。
  • 检票的代码是令人震惊的容易维持,也延伸功能的网络应用程序可以很容易,因为它是面向对象的框架,而不是标记与其他种标记表示的代码。
  1. 码头是一个非常轻型容器,并完善针对你的发展情况。

  2. 你可能想看看 检票 为您呈现一面;你似乎更加舒适的做码-等任务而不是直接的用户界面。

  3. 的模式所描述的单独模式。看一看在谷歌的结果 单独在java.

  1. 应用程序服务器:tomcat
  2. 网页:jsp
  3. 你需要的一类单独或类带有静态的方法。警告:当心竞争条件。你可能需要使用 同步 关键词对于那些方法涉及更新/修改操作。

这是一个非常开放的问题,并有一个巨大数量的可能的答案取决于你的需求。的 标准 的方式来编写网的应用是使用Java EE平台,这意味着Jsp servlet、和前总的业务逻辑。然而,有一些受欢迎的和有效的替代品,如簧、缝、应用程序,并甚至更为激进的替代品,如它在轨道上。这听起来像你的需要是非常简单,所以你可能想要去与一个简单的解决方案,如码头+Servlet+JSP。

我假设你的引擎,可以同时处理多个请求?如果不是,你可能想看看找出一种方法,队列中的请求,例如JMS。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top