这个想法是直接从开发工作区的分散目录结构中为 Web 应用程序提供服务,而不是将模块打包到 JAR 中,然后最终进入WEB-INF/lib
WAR。
主要好处是:
- 你不需要建立档案。
- 当您更改工作区中的资源时,更改会反映在正在运行的 web 应用程序中,而无需重新部署 web 应用程序或重新启动服务器。
使用 Servlet 3.0,Web 资源也可以捆绑在库 JAR 中META-INF/resources
,因此类和资源可能来自多个工作区目录。
Tomcat 7.0 支持 aVirtualWebappLoader
和 aVirtualDirContext
来配置基于分散资源和类目录的集合的 Web 应用程序。
为了直接从 Eclipse 工作区为您的 Web 应用程序提供服务,WTP 在$WORKSPACE/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/conf/server.xml
出于某种原因,WTP 不直接使用 Tomcat 加载器和上下文实现,而是有自己的WtpDirContext
,WtpWebappLoader
它们略有不同但相似。(我相信这种方法比 Tomcat 中的当前解决方案更老。TLD 扫描有一些特殊的逻辑 - 我不确定最新的 Tomcat 版本是否仍然需要。)这些帮助类包含在org.eclipse.jst.server.tomcat.runtime.70.loader.jar
你注意到的中。
如果没有Serve modules without publishing,当您在库模块中更改 Web 资源时,META-INF/resources
在浏览器中重新加载当前页面后,此更改将不会在正在运行的应用程序中直接可见。