我有一个当前在Tomcat容器中运行的旧Java servlet。我想在容器外部运行它,作为一个独立的Java应用程序。这样做的主要目的是因为部署此应用程序的新角色仅涉及计算,而不涉及请求的服务。
我应该如何修改servlet代码?是否会将servlet的init()
代码提取到新类帮助的main()
方法中?
答案 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代码保持不变,从而降低引入错误的风险