嵌入式Tomcat 7.0.32下的Web应用程序部署

时间:2012-10-28 15:49:00

标签: java servlets tomcat7

我们一直在嵌入模式下成功使用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. 所以为了调试这个问题,我评论了我的大部分代码,以便我有一个vanilla tomcat实现,只是非常基本的东西,即设置引擎名称,默认主机,设置主机属性,添加连接器( nio,具有默认属性)并部署战争。没有servlet和其他东西,只是为了检查基本的东西是否有效。令我惊讶的是,当我运行此代码时,它仍然在我的servlet中遇到同样的问题,这是怎么发生的,现在我的代码被注释它没有注册任何servlet,它仍然从哪里找到它?嵌入式tomcat是否存储了一些旧的引用,这些引用在后续运行时没有得到清理?我尝试更换端口,但这也无济于事。

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

    提前致谢,

    维克拉姆

1 个答案:

答案 0 :(得分:0)

找出问题所在。

按相反顺序,

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

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

谢谢,

维基