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

从WebLogic迁移至Tomcat后,Eclipse中JSPx调试断点失效

从WebLogic迁移到Tomcat9后XML风格JSP断点失效的解决办法

问题根源

你遇到的断点失效,本质是Tomcat与WebLogic对XML风格JSP的编译逻辑差异:

  • Tomcat的JSP默认编译后继承org.apache.jasper.runtime.HttpJspBase,这个类已经封装了Servlet生命周期方法(doGet/doPost等),负责JSP的运行时调度。
  • 你在XML风格JSP中指定extends="javax.servlet.http.HttpServlet",跳过了Tomcat的JSP运行时封装,导致<jsp:declaration>里的doGet要么没被Tomcat的请求逻辑触发,要么编译后的字节码和原JSP代码的断点映射关系断裂。

修复步骤

1. 移除错误的继承声明

删掉XML JSP中的<jsp:directive.page extends="javax.servlet.http.HttpServlet" />,让JSP默认继承Tomcat的HttpJspBase:

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.3">
 <jsp:declaration><![CDATA[//
    // 不要重写doGet/doPost,改用自定义方法
    public void customHandle(HttpServletRequest req, HttpServletResponse resp) {
       System.out.println("hello custom method");
    }
 //]]></jsp:declaration>
</jsp:root>

2. 调整业务逻辑位置

如果需要处理GET请求逻辑,不要在<jsp:declaration>里重写doGet,改用以下方式:

  • 直接用<jsp:scriptlet>编写逻辑,断点可正常映射:
<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.3">
 <jsp:scriptlet><![CDATA[
    System.out.println("hello doGet"); // 断点可正常触发
 ]]></jsp:scriptlet>
</jsp:root>
  • 规范做法是把请求处理逻辑抽离到自定义Servlet,JSP仅负责视图渲染,调试更顺畅。

3. 清理并重新部署

  • 关闭Tomcat,删除Tomcat工作目录(默认路径TOMCAT_HOME/work/Catalina/localhost/[你的应用名])下的编译文件,避免旧代码干扰。
  • 在Eclipse中用Debug模式启动Tomcat,确保调试端口正常连接。

验证

修复后重启调试,触发请求检查断点是否正常命中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:50:11