Eclipse的Web工具平台(WTP)允许您将Tomcat配置为“服务器模块而不发布”:
Web内容将直接从Dynamic Web Project的“WebContent”文件夹中提供。自定义上下文用于使项目的依赖项在Web应用程序的类加载器中可用。
在一个5步骤的过程中(只是开玩笑,你选择了#步骤),技术上发生了什么以及Eclipse生成的文件在哪里?我注意到Eclipse在Tomcat lib目录中生成了一个org.eclipse.jst.server.tomcat.runtime.70.loader.jar
文件。
答案 0 :(得分:15)
我们的想法是直接从开发工作区的分散目录结构中提供Web应用程序,而不将模块打包到JAR中,然后在WAR中以WEB-INF/lib
结束。
主要好处是:
使用Servlet 3.0,Web资源也可以捆绑在META-INF/resources
的库JAR中,因此类和资源可能来自多个工作区目录。
Tomcat 7.0支持VirtualWebappLoader
和VirtualDirContext
基于分散的资源和类目录的集合来配置Web应用程序。
要直接从Eclipse工作区提供Web应用程序,WTP会生成与您的项目结构相匹配的合适Tomcat配置
在$WORKSPACE/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/conf/server.xml
由于某种原因,WTP不直接使用Tomcat加载器和上下文实现,但它有自己的WtpDirContext
和WtpWebappLoader
,它们略有不同但相似。 (我相信这种方法比Tomcat中的当前解决方案更早.TLD扫描有一些特殊的逻辑 - 我不确定最新的Tomcat版本是否仍然需要这些。)这些helper classes包含在你注意到org.eclipse.jst.server.tomcat.runtime.70.loader.jar
。
如果没有服务模块而不发布,当您更改库模块中META-INF/resources
中的Web资源时,在重新加载当前页面后,此更改将无法在正在运行的应用程序中直接显示浏览器。