0

我们一直在嵌入式模式下成功使用 tomcat 7.0.19。然而最近由于我们关注领域的一些修复,我们决定迁移到 tomcat 7.0.32。大多数事情都按预期使用相同的代码和更新版本,但是由于某种原因战争部署效果不佳。我在我的 tomcat 上注册了几个 servlet。面临以下2个问题,

  1. 嵌入式 tomcat 行为从 7.0.19 更改为 7.0.32。为了详细说明这一点,让我解释一下行为差异,在 7.0.19 中,我可以部署我的应用程序,当我点击“host:port/contextpath”时,它会加载应用程序的起始页面(即欢迎页面,此页面以 UI 为中心,并且不需要服务器干预,所以我的 servlet 都没有被调用)。但是,对于 7.0.32,相同的 url 会导致我的 servlet 被调用。

  2. 所以为了调试问题,我注释了我的大部分代码,这样我就有了一个普通的 tomcat 实现,只是非常基本的东西,即设置引擎名称、默认主机、设置主机属性、添加连接器(nio,具有默认属性)并部署战争。没有 servlet 和其他东西,只是为了检查非常基本的东西是否有效。令我惊讶的是,当我运行这段代码时,它仍然在我的 servlet 中出现同样的问题,这是怎么发生的,既然我的代码被注释了,它没有注册任何 servlet,它仍然从哪里找到它?嵌入式 tomcat 是否存储了一些旧引用,这些引用在后续运行中没有被清理?我尝试更改端口,但这也无济于事。

我在这里碰壁,无法理解这种奇怪的行为,如果我弄清楚#2,只有这样我才能在#1上取得一些进展。

提前致谢,

维克拉姆

4

1 回答 1

0

弄清楚问题出在哪里。

以相反的顺序,

2 - 这实际上是一个奇怪的行为,香草嵌入式 tomcat 代码也调用了从未注册过的 servlet。这里的问题在于 Eclipse,由于某种原因,它使用了我班级的旧参考资料。当我从 Eclipse 外部运行相同的代码时,即通过命令提示符,事情恢复正常。

1 - 这个问题与 Web 部署有关,在我的代码中,我另外将我的类加载器设置为 WebappLoader 并最终将我的应用程序 jar 添加到其中。无论出于何种原因,这在 7.0.19 中都可以正常工作,但在 7.0.32 中却没有,当我通过类路径将所有要在应用程序启动期间加载的 jar 外部化时,这个问题也得到了解决。

谢谢,

维姬

于 2012-10-30T09:33:25.087 回答