6

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

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

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

现在我所做的就是每次出现问题时重新启动服务器。我已经浪费了足够多的时间了。我想我需要花更多的时间来了解幕后发生的事情。

4

1 回答 1

18

环境假设

我会假设:

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

部署目录

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

出版

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

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

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

发布设置

更改静态资源

如果你改变让我们说src/main/webapp/resources/myApp/css/main.css

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

更改 JSP 文件

如果更改 JSP 文件:

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

更改 Java 文件

如果更改 java 源文件:

  • 该文件被编译成target/classes
  • 发布后,文件被复制到部署文件夹
  • Tomcat注意到类文件被更改并重新加载上下文(即重新启动 Web 应用程序)

您可以在“模块”选项卡上的服务器设置中打开自动重新加载功能。如果没有自动重新加载,您仍然可以使用热交换功能,它能够替换正在运行的 JVM 中的代码。这只有在方法签名没有改变时才有可能。

自动重新加载功能

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

打扫

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

  • 清理已编译的类(Project > Clean...-删除target/classes
  • 清理部署的文件(Server > Clean...- 删除部署文件夹)
  • 清理 Tomcat 工作目录(Server > Clean Tomcat Work Directory...- 删除已编译的 JSP)
于 2013-07-07T07:58:21.380 回答