这已经困扰了我很长一段时间,所以我想我会把它扔出去。也许Jetty专家会看到它。
我有一个可以正常工作的J2EE应用程序。当我启动jetty服务器主机时,我看到所有正确的信息都来自日志控制台,包括" Context Initialized"以下代码中的消息。
但是,如果我通过将root.war文件复制到webapps文件夹来部署新版本的应用程序,我会看到" Context Initialized"登录,但启动停在那里,没有进一步启动。服务器没有响应,所以我必须在每次部署后重新启动它。
我的问题是,接下来要查看挂断的内容。 ServletContextListener.contextInitialized()
之后会发生什么public class ApplicationListener implements ServletContextListener {
private static final Logger log = Logger.getLogger(ApplicationListener.class.getName());
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
log.info("Context Initialised"); //this is the last thing to come out of the log before it hangs if jetty is restarting due to a new .war file detection
}
当我从头开始码头时 - 我看到上面其余的这些日志是吐出来的,这表示正常开始:
2015-12-05 12:40:33.214:INFO:oejdp.ScanningAppProvider:Deployment monitor /opt/nimbits/contexts at interval 1
2015-12-05 12:40:33.215:INFO:oejd.DeploymentManager:Deployable added: /opt/nimbits/contexts/javadoc.xml
2015-12-05 12:40:33.222:INFO:oejd.DeploymentManager:Deployable added: /opt/nimbits/contexts/test.xml
2015-12-05 12:40:33.233:INFO:oejw.WebInfConfiguration:Extract jar:file:/opt/nimbits/webapps/test.war!/ to /private/var/folders/x4/vh_dqlln1hn_vkk8jgz9tcf00000gn/T/jetty-0.0.0.0-8080-test.war-_-any-/webapp
2015-12-05 12:40:33.528:INFO:oejs.TransparentProxy:TransparentProxy @ /javadoc-proxy to http://download.eclipse.org/jetty/stable-8/apidocs
2015-12-05 12:40:33.557:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
答案 0 :(得分:1)
The Java EE 6 Tutorial声明了以下有关Servlet生命周期的内容:
- 如果servlet的实例不存在,则为Web容器
- 加载servlet类。
- 创建servlet类的实例。
- 通过调用init方法初始化servlet实例。
- 调用服务方法,传递请求和响应对象。 (即GET或POST请求)
醇>
EE 6 Tutorial指出ServletListener对Servlet init()
和destroy()
调用做出“反应”。这意味着在init()
完成步骤1.3后调用您的侦听器。您可以尝试覆盖servlet的init方法并添加print语句来自行检查。
鉴于上述情况,看起来您的应用程序在第2步中被挂起,这是服务方法本身的调用(GET / POST)。我建议添加额外的日志记录到servlet init和doGet / doPost方法,以确保。如果仍然无法解决您的问题try enabling Jetty trace,那么您可以更详细地记录可能出现的问题。