You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP+Eclipse+Tomcat环境下热代码替换失败问题咨询

解决Tomcat下JSP热替换失败警告的方案

你遇到的这个“Hot code replace failed”警告,根源在于Tomcat默认使用ECJ(Eclipse编译器)编译JSP,而Jetty会优先调用JDK编译器。强制Tomcat切换到JDK编译器就能消除这个警告,而且不会影响修改内容在浏览器中正常生效。

下面是两种具体的操作方式:

方法一:修改Tomcat全局配置(对所有项目生效)

  • 找到Tomcat安装目录里的 conf/web.xml 文件
  • 定位到名为 jsp 的servlet配置块,添加compiler初始化参数,指定用JDK的javac编译:
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <!-- 新增以下参数 -->
    <init-param>
        <param-name>compiler</param-name>
        <param-value>javac</param-value>
    </init-param>
    <!-- 原有其他参数保留不动 -->
    <load-on-startup>3</load-on-startup>
</servlet>
  • 保存文件后重启Tomcat即可生效

方法二:在Eclipse中针对单个项目配置

  • 右键点击目标项目 → Properties → Project Facets,确认勾选了匹配你环境版本的Dynamic Web Module和Java
  • 切换到Deployment Assembly标签,确保部署配置正常
  • 打开项目的WEB-INF/web.xml(没有的话直接新建),添加JSP servlet的初始化参数:
<web-app>
    <!-- 项目原有配置保留 -->
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>compiler</param-name>
            <param-value>javac</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
</web-app>
  • 重启Eclipse里的Tomcat服务器

补充:如果你的JDK路径没加入系统环境变量,compiler参数可以直接写javac的绝对路径,比如Linux下的/usr/lib/jvm/java-11-openjdk/bin/javac,或者Windows下的C:\Program Files\OpenJDK\jdk-11.0.20\bin\javac.exe。

内容的提问来源于stack exchange,提问作者isobretatel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:23:13