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
相关产品推荐
相关产品推荐

