【问题标题】:Changing the java class file in web app requires building the complete project again and deploy it更改 web 应用程序中的 java 类文件需要重新构建完整的项目并部署它
【发布时间】:2017-07-11 05:40:27
【问题描述】:

所以我正在开发一个网络应用程序。所以有java脚本文件和java Servlet类文件。我在 tomcat 服务器上运行我的应用程序。因此,当我在 JSP 文件中进行任何更改时,如果我重新加载浏览器,那么更改会立即得到反映。但是,如果我对 servlet 代码进行任何更改,为什么我需要再次启动服务器才能看到我的更改得到反映?有人可以明确说明为什么在第二种情况下需要重新启动服务器吗? 重新编译的java类文件是否需要重启服务器?

【问题讨论】:

标签: java jsp tomcat servlets


【解决方案1】:

由于 J2EE 容器实现,在 tomcat 中,

JSP -- 使用独立的 ClassLoader;

Normal Servelet 和其他类——AppClassloader

当一个jsp改变时,新编译的Servlet(不同于用户定义的Servlet)类将被一个新的独立的ClassLoader加载。

【讨论】:

    【解决方案2】:

    Servlet 和 JSP 都是 servlet,它们都是运行时的类文件。但它们的部署方式不同。

    servlet是先编译部署,修改后Eclipse编译部署。类文件到 servlet 容器中。如果web服务器启动,类之前已经被servlet容器加载,并且可能被修改的类文件不会在servlet容器中执行。

    编译和 JSP 是一个 web 服务器。 Tomcat可以设置监控JSP文件的变化,变化后,重新编译,执行。

    【讨论】:

      【解决方案3】:

      是的,确实,当对 .java 文件进行修改时,它们需要重新编译并转换为 .class 文件,这些文件存储在目标文件夹或 tomcat 服务器的 webapps 文件夹中。此更改需要重新启动。虽然,eclipse 被配置为在一段时间后自动重启你的 tomcat,从而触发上下文重新加载。

      【讨论】:

      • JSP 文件(如果已更改)与现有文件交换。但是在 java 文件的情况下,为什么它没有发生?
      • JSP 文件经过 Java 解释器而不是编译器。当您调用它们时,它们会像 javascript 一样被解释。
      • @JoeyPinto 真的,试试看一下tomcat的work目录。你会看到jsp文件被转换成java文件,然后编译成class文件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多