服务模块的技术细节没有在Eclipse WTP和Tomcat中发布?

时间:2013-03-22 16:27:53

标签: eclipse tomcat tomcat7 eclipse-wtp

Eclipse的Web工具平台(WTP)允许您将Tomcat配置为“服务器模块而不发布”:

  

Web内容将直接从Dynamic Web Project的“WebContent”文件夹中提供。自定义上下文用于使项目的依赖项在Web应用程序的类加载器中可用。

在一个5步骤的过程中(只是开玩笑,你选择了#步骤),技术上发生了什么以及Eclipse生成的文件在哪里?我注意到Eclipse在Tomcat lib目录中生成了一个org.eclipse.jst.server.tomcat.runtime.70.loader.jar文件。

1 个答案:

答案 0 :(得分:15)

我们的想法是直接从开发工作区的分散目录结构中提供Web应用程序,而不将模块打包到JAR中,然后在WAR中以WEB-INF/lib结束。

主要好处是:

  • 您无需构建档案。
  • 更改工作区中的资源时,更改会反映在正在运行的Web应用程序中,而无需重新部署Web应用程序或重新启动服务器。

使用Servlet 3.0,Web资源也可以捆绑在META-INF/resources的库JAR中,因此类资源可能来自多个工作区目录。

Tomcat 7.0支持VirtualWebappLoaderVirtualDirContext基于分散的资源和类目录的集合来配置Web应用程序。

要直接从Eclipse工作区提供Web应用程序,WTP会生成与您的项目结构相匹配的合适Tomcat配置 在$WORKSPACE/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/conf/server.xml

由于某种原因,WTP不直接使用Tomcat加载器和上下文实现,但它有自己的WtpDirContextWtpWebappLoader,它们略有不同但相似。 (我相信这种方法比Tomcat中的当前解决方案更早.TLD扫描有一些特殊的逻辑 - 我不确定最新的Tomcat版本是否仍然需要这些。)这些helper classes包含在你注意到org.eclipse.jst.server.tomcat.runtime.70.loader.jar

如果没有服务模块而不发布,当您更改库模块中META-INF/resources中的Web资源时,在重新加载当前页面后,此更改将无法在正在运行的应用程序中直接显示浏览器。