Java应用程序的Web用户界面

Joã*_*lva 15 java jsp tomcat jetty application-server

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

我对Java的基本API非常熟悉,但是我没有太多使用Java进行Web环境的经验(尽管我使用过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实现这一目标?

djn*_*jna 10

  1. App Server.您认为Tomcat在运行时占用空间,学习量或......方面都很重要?我倾向于选择与IDE完全集成的东西.所以Eclipse + Tomcat或Apache Geronimo,或许在它的WebSphere Community Edition中就可以完成这项工作.从我所看到的,这些足以满足你的需求,学习曲线非常易于管理.
  2. 是JSPs.您可能会发现您的演示文稿需求变得更加复杂.进入JSF的额外努力可能会得到回报 - 像日期选择器这样的小工具.
  3. 在您的处理过程中,您将拥有一个servlet(如果您使用的是JSF,则为动作类)该类可以在启动时初始化Engine类型的成员变量,然后用于每个请求.要记住的是,许多用户将同时击中该servlet,从而击中该引擎.您的引擎是否可以安全地同时使用多个线程?

在这一点上进行扩展.在实现JSP时,有两种模型被称为(具有一些创造性)作为模型1和模型2.请参阅此解释.

在模型1的情况下,您倾向于将代码直接放入JSP中,它扮演控制器角色.Persoanlly,即使在处理小型,快速开发的应用程序时,我也不是这样.我总是使用Model 2.但是如果你选择的话,你可以把一些Java放到你的JSP中.

<%  MyWorker theWorker = MyWorkerFactory.getWorker();
    // theWorker.work();
%>
Run Code Online (Sandbox Code Playgroud)

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

private static MyWorker s_worker = new MyWorker();
public static synchronized getWorker() {
       return s_worker;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以在首次调用该方法时创建worker.

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

private MyWorker m_worker = MyWorkerFactory.getWorker();
Run Code Online (Sandbox Code Playgroud)

这将在加载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();
} 
Run Code Online (Sandbox Code Playgroud)