将Java Servlet转换为独立Java应用程序

时间:2012-03-30 11:31:03

标签: java servlets

我有一个当前在Tomcat容器中运行的旧Java servlet。我想在容器外部运行它,作为一个独立的Java应用程序。这样做的主要目的是因为部署此应用程序的新角色仅涉及计算,而不涉及请求的服务。

我应该如何修改servlet代码?是否会将servlet的init()代码提取到新类帮助的main()方法中?

5 个答案:

答案 0 :(得分:2)

将您想要的功能从servlet提取到其他类,以便servlet只是该功能的Web界面。

理想情况下,其他类不应使用javax.servlet.*中的任何内容。

然后使用main方法创建一个单独的类,以适当的方式使用其他类。

答案 1 :(得分:1)

servlet实现了与Tomcat servlet容器交互的接口。如果没有从servlet上下文读取设置(路径名,配置参数),则可以将逻辑提取到主类中。

您需要确保不依赖服务中的请求/响应方案。通常,如果只有一个进程运行代码,则比并发方案更容易编写。但是人们不能确定不会有这样的影响(例如,现在基于请求的缓存不会在独立的情况下清空)。

还会删除代码中的所有servlet api依赖项。它不起作用,不再需要。

祝你好运!

答案 2 :(得分:1)

你必须小心谨慎。可能会发生某些过滤器正在执行servlet中未见的必要工作

假设您的案例非常简单并且GET或POST只是触发代码,那么转换为经典的Java应用程序应该很容易。

只需先调用前一个init部分和doGet或doPost中的代码。

答案 3 :(得分:1)

如上所述,我会将servlet类转换为主类。新类的主要方法将创建主类的实例,执行init方法以初始化if(可能使用从命令行接收的参数)。然后在try / catch / finally块中调用service方法,并在finally块中调用servlet的destroy方法。当然,您的新服务方法将在没有参数的情况下被调用,并且不会包含对servlet api的任何引用。

答案 4 :(得分:1)

首先需要弄清楚一些事情,servlet中的功能可能会对某些url的参数做出反应。 首先弄清楚计算部分是什么以及它期望的参数, 一旦你理解了这一点,找出你的独立应用程序中的内容将是微不足道的。

另一种方法是将Jetty嵌入到您的主应用程序中,让它运行您的servlet,
这将使您的servlet代码保持不变,从而降低引入错误的风险