当我在Eclipse中运行tomcat上的应用程序时会发生什么

时间:2013-07-06 23:05:31

标签: eclipse tomcat spring-mvc

我正在使用eclipse和tomcat服务器创建一个java web应用程序。我想知道当我在Tomcat上运行我的网站时会发生什么? Eclipse在后台运行tomcat上的应用程序的步骤是什么。

这将帮助我了解何时关闭服务器(调试时)/何时清理服务器等。

我需要知道服务器的内容,以便我可以更好地进行调试。

现在我所做的就是每次出错时都重启服务器。我浪费了足够的时间做这件事。我想我需要花更多的时间来了解幕后发生的事情。

1 个答案:

答案 0 :(得分:16)

环境假设

我会假设:

  • target/classes是已编译类的目标文件夹
  • src/main/webapp是网络应用程序内容文件夹
  • Project > Build Automatically选项已选中

部署目录

Eclipse正在使用爆炸式WAR部署 - 即部署的应用程序部署为文件夹,而不是单个文件存档。应用程序文件从${workspace}/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/放置并加载。

出版

发布是一个中央流程,负责组装和部署Web应用程序。在谈论本地Tomcat时,这意味着将“web内容,已编译的类,库,......”复制到部署目录(.metadata中的那个)。

Eclipse能够进行部分发布 - 即当单个资源发生变化时(例如某些JSP),Eclipse将只发布该单个文件。

默认情况下,当某些资源发生更改时,会自动执行发布过程。这可以在服务器设置中修改(双击 Servers 视图中的服务器名称)。

Publishing setting

更改静态资源

如果您更改,请说src/main/webapp/resources/myApp/css/main.css

  • 发布后,文件将被复制到部署文件夹
  • 资源可立即供服务器客户端使用

更改JSP文件

如果您更改JSP文件:

  • 发布后,文件将被复制到部署文件夹
  • Tomcat注意到JSP文件已更改并重新编译它
  • 已更改的JSP已准备好呈现内容

更改Java文件

如果您更改了java源文件:

  • 该文件被编译为target/classes
  • 发布后,文件将被复制到部署文件夹
  • Tomcat notices that a class file was changed并重新加载上下文(即重新启动Web应用程序)

您可以在“模块”选项卡上的服务器设置中启用自动重新加载功能。如果没有自动重新加载,您仍然可以使用hot swap功能,该功能可以替代运行JVM中的代码。仅当方法签名未更改时才可以这样做。

Auto reloading feature

如果在重新加载java更改时需要更高级的解决方案(即不仅限于更改方法体),则应检查JRebel之类的项目(非免费)。

清洗

已部署的应用程序可能已损坏。值得注意的是,当您想要清理完全编译和发布的资源时,您应该:

  • 清理已编译的类(Project > Clean... - 删除target/classes
  • 清理已部署的文件(Server > Clean... - 删除部署文件夹)
  • 清理Tomcat工作目录(Server > Clean Tomcat Work Directory... - 删除已编译的JSP)