一、准备工作:安装必要工具与环境 在Ubuntu上调试JSP项目前,需确保已安装以下工具:
sudo apt update && sudo apt install openjdk-11-jdk安装OpenJDK 11(兼容Tomcat 9+);sudo apt install tomcat9 tomcat9-admin安装Tomcat 9(默认端口8080);二、查看日志定位问题
日志是调试JSP的“指南针”,Ubuntu下Tomcat的日志主要位于/var/log/tomcat9/目录(默认日志文件为catalina.out)。
tail -f /var/log/tomcat9/catalina.out命令,可动态跟踪应用程序运行时的输出;grep 'ERROR' /var/log/tomcat9/catalina.out命令,快速定位错误堆栈(如NullPointerException、ServletException);System.err.println()输出自定义错误信息,这些信息会同步到catalina.out中。三、使用IDE图形化调试(推荐) 图形化调试是最直观的方式,以IntelliJ IDEA为例:
WEB-INF/web.xml、WEB-INF/classes等目录存在);Run > Edit Configurations,添加Tomcat配置,设置Deployment(添加项目WAR包或exploded目录),并勾选Debug模式;<% int a = 1; %>)或Servlet的doGet()/doPost()方法中点击行号左侧,设置断点;Debug按钮(绿色虫子图标),启动Tomcat并附加调试器;http://localhost:8080/your-project/index.jsp),程序会在断点处暂停,可通过Step Over(F8)、Step Into(F7)单步执行,查看变量值(Variables窗口)、表达式结果(Evaluate Expression)。四、命令行调试(JDB)
若偏好命令行,可使用JDK自带的jdb工具:
.class文件(位于work/Catalina/localhost/your-project/org/apache/jsp/目录),无需手动编译;jdb -attach localhost:5005(需先开启Tomcat调试端口,见下文“远程调试”部分);stop in your.package.YourServlet.doGet命令,在指定方法中设置断点;run命令,启动应用程序;next(单步执行)、print variableName(查看变量值)、cont(继续执行)等命令进行调试。五、日志框架增强调试能力
使用Log4j或SLF4J替代System.out.println(),可实现更灵活的日志管理:
pom.xml(Maven项目)中添加Log4j依赖:<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
src/main/resources/log4j.properties中设置日志级别(如log4j.rootLogger=DEBUG, console)和输出目标(如控制台、文件);Logger.getLogger(YourClass.class).debug("Variable value: " + variable),记录关键信息。日志会输出到logs/目录下的指定文件(如console.log),便于后续分析。六、远程调试(跨机器调试) 若项目运行在远程Ubuntu服务器上,可通过远程调试连接:
bin/catalina.sh文件(Linux下),在JAVA_OPTS中添加:export JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
保存后重启Tomcat(sudo systemctl restart tomcat9);Run > Edit Configurations,添加Remote JVM Debug配置,设置Host(服务器IP)、Port(5005);Debug按钮,IDE会连接到远程Tomcat,之后可在IDE中设置断点、查看变量,如同本地调试。七、常见问题排查技巧
java -version确认JDK版本与Tomcat兼容(如Tomcat 9需JDK 8+);tomcat9)有权访问JSP文件及目录,使用sudo chown -R tomcat9:tomcat9 /path/to/your/project修改权限;work目录(/var/lib/tomcat9/work/),清除旧编译文件,避免缓存导致的错误;netstat -an | grep 8080(Tomcat默认端口)检查端口是否被占用,若有冲突,修改server.xml中的port属性。