如何将servlet Web界面附加到本地客户端应用程序?

时间:2010-11-23 20:22:29

标签: java servlets client-server

我正在设想将来使用Tomcat和servlet在Web服务器上运行的(现在本地)程序。我只是对如何将现有应用程序与HTTPRequests集成到servlet中感到困惑。

  • 我的应用程序是否已经运行,并且servlet可以转移控制权?
  • 或者我的程序是否会成为servlet本身?
  • 或者我的应用程序是否包含servlet,而Tomcat只知道我的应用程序中有一个servlet?

我只需要一些关于如何将所有内容组合在一起的建议,以及servlet如何调用应用程序逻辑。

我想象的是:

  1. HTTPRequest来自Tomcat,它通过名为Servlet.service(...)将其路由到Servlet(如果尚不存在则创建Servlet)
  2. Servlet.service()检查应用程序是否正在运行,如果没有,则为应用程序创建新进程
  3. Servlet可以通过命令行或通过stdin将HTTPRequest头/主体发送到新进程
  4. Servlet可以等待新进程完成,或者只是发回HTTPResponse并让进程运行(应用程序需要进行线程化,所以立即发送响应并让它运行)。
  5. 如果另一个请求来到servlet,请执行步骤2.
  6. 听起来合理吗?

    我认为不是单独创建一个进程,而是可以在Servlet中调试我的应用程序并让它以这种方式运行。

3 个答案:

答案 0 :(得分:1)

不完全知道您的应用程序是什么,我的建议是在当前应用程序中尽可能多地隔离逻辑。这将是您的“业务”逻辑。将其保存为打包到jar中的单独项目。

创建一个新项目作为您的Web层(最有可能打包为WAR)。这将包括用于与业务逻辑交互的servlet和jsp页面。例如,您有一个用于创建某种业务对象的表单。该表单将是一个由servlet“提供”的jsp页面。提交表单时,servlet将处理业务项目(jar)中的表单提交和调用代码。

Web内容只是作为一个单独的层,保持所有业务逻辑与可视化Web端分离,这也允许您在其上构建一个服务层,最终可能位于您的Web项目和实际业务之间逻辑,虽然取决于你的目的可能会有点过头。

答案 1 :(得分:1)

servlet是Java为Web服务器实现通用网关接口程序的方法。因此,您正在撰写的这个程序(您可能想提供更多信息)应该是您提供输入的程序类型,处理输入,然后提供响应。

我建议您将当前正在编写的应用程序分解为控制器和模型类。处理输入和输出的任何东西都是你的控制器。任何处理业务逻辑的东西都是模型。 (任何打印出来的东西都是视图。是的,我说的是MVC,模型 - 视图 - 控制器模式。)

因此,您的应用程序中的控制器(在将所有内容移动到servlet之前)可能会从命令行中获取一堆参数,检查它们的正确性,正确的组合类型等。

您的模型代码应该有一个不依赖于控制器的漂亮,简单的界面。 (它不应该知道它是从您的应用程序还是从servlet层调用。)它应该提供一种方法,通过获取对您的业务逻辑有意义的参数来执行业务逻辑。因此,如果您正在编写一个计算两个数字之和的servlet,那么模型层应该有一个采用两个数字参数并返回总和的方法。这样你可以将模型放入应用程序或servlet中,它就可以正常工作。只有您的控制器需要更改。

我不会讨论如何编写servlet与应用程序 - 这是一个涉及的主题,并且有大量的例子。但是servlet调用应用程序逻辑的方式很简单:实例化模型类,然后在该实例上调用方法。就像任何其他Java应用程序一样。

答案 2 :(得分:0)

考虑到你的应用程序是一个线性的,而不是线程化的程序,当你实例化类的对象并且对象有一些外部接口(公共方法)时会执行某些操作。然后servlet容器将启动,你必须编写一个新的servlet类,它将创建对象的实例并从标准的servlet方法(service(),doGet()等)调用你的方法。请记住将类放在servlet容器或webapp的类路径中。