JSP在CentOS上如何进行调试
导读:在 CentOS 上调试 JSP 的实用流程 一 环境准备与快速验证 安装 JDK 8(或更高版本)并配置环境变量,验证命令:java -version。示例: 安装:sudo yum install -y java-1.8.0-ope...
在 CentOS 上调试 JSP 的实用流程
一 环境准备与快速验证
- 安装 JDK 8(或更高版本)并配置环境变量,验证命令:java -version。示例:
- 安装:sudo yum install -y java-1.8.0-openjdk
- 配置:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk;export PATH=$PATH:$JAVA_HOME/bin
- 安装 Tomcat 9(或你使用的版本),启动并验证:
- 安装:sudo yum install -y tomcat
- 启动/开机自启:systemctl start tomcat;systemctl enable tomcat
- 访问测试:http://服务器IP:8080
- 部署最简 test.jsp 验证环境(放到 webapps/ROOT 或自定义目录):
- 代码示例:
< %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> < !DOCTYPE html> < html> < body> < h1> Hello, JSP on CentOS< /h1> < %= "Server: " + application.getServerInfo() %> < /body> < /html> - 访问:http://服务器IP:8080/test.jsp 以上步骤确保运行环境可用,是后续断点调试与日志排查的前提。
- 代码示例:
二 远程断点调试 Tomcat 中的 JSP
- 开启 Tomcat 远程调试
- 编辑 bin/catalina.sh,在文件靠前位置加入(端口可按需改为 8000):
CATALINA_OPTS="$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000" - 重启 Tomcat:systemctl restart tomcat
- 开放防火墙端口(若启用 firewalld):firewall-cmd --add-port=8000/tcp --permanent & & firewall-cmd --reload
- 编辑 bin/catalina.sh,在文件靠前位置加入(端口可按需改为 8000):
- 在 IDE 中远程调试(以 IntelliJ IDEA 为例)
- Run/Debug Configurations → 新建 Remote JVM Debug
- Host:服务器IP;Port:8000;Transport:Socket
- 将断点打在 JSP 编译后的 Servlet 源码(运行一次后会在 work/Catalina/… 生成)或你自己的 Java Bean/Filter/Servlet 上
- 浏览器访问触发断点:http://服务器IP:8080/your-app/page.jsp
- 命令行方式使用 jdb 附加调试
- 在服务器上执行:jdb -attach 服务器IP:8000
- 常用命令:stop in 全类名.方法名;cont;step;print 变量 说明:JSP 在运行期会被容器编译为 Servlet,因此断点通常落在生成的 *_jsp.java 的 _jspService 方法中;远程调试依赖 JDWP,与调试普通 Java 程序思路一致。
三 日志与输出增强
- 打开 JSP/Servlet 容器日志
- 修改 conf/logging.properties,提升相关包日志级别(开发环境建议),例如:
org.apache.jasper.servlet.JspServlet.level = FINE org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE - 重启后在 logs/catalina.out 观察请求分发、JSP 编译与异常堆栈
- 修改 conf/logging.properties,提升相关包日志级别(开发环境建议),例如:
- 打开 EL 表达式解析日志(Tomcat 专用)
- 在 conf/logging.properties 增加:
org.apache.jasper.el.level = FINE org.apache.el.level = FINE org.apache.jasper.el.handlers = 1catalina.org.apache.juli.AsyncFileHandler org.apache.el.handlers = 1catalina.org.apache.juli.AsyncFileHandler - 级别含义:FINEST < FINER < FINE < INFO < WARNING < SEVERE;FINER/FINEST 日志量很大,生产请恢复为 INFO
- 在 conf/logging.properties 增加:
- 应用内日志
- 使用 Log4j/Logback 输出业务日志到文件(便于归档与分析),示例 Log4j 配置片段:
log4j.rootLogger=INFO, file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=/var/log/jsp/myapp.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ yyyy-MM-dd HH:mm:ss} %-5p %c{ 1} :%L - %m%n - 建议将日志目录(如 /var/log/jsp)加入 logrotate 做按日轮转与保留策略,避免磁盘被占满
- 使用 Log4j/Logback 输出业务日志到文件(便于归档与分析),示例 Log4j 配置片段:
- 浏览器与网络层排查
- 使用浏览器开发者工具查看 请求/响应头、状态码与响应内容
- 必要时在响应头中关闭缓存(如 Cache-Control: no-cache)以避免旧输出干扰
- 通过 curl -v 查看原始 HTTP 往返,辅助定位网关/代理/负载均衡引入的问题 以上手段可显著提升问题定位效率,尤其是 EL 日志 能直接看到表达式解析过程与作用域解析链。
四 常见问题与排查清单
- 404 或无法访问
- 确认 Tomcat 已启动(systemctl status tomcat)、应用已部署(webapps 下是否有解压目录或 WAR 已解包)、访问路径是否正确(ROOT 应用可直接用 /,其他应用需加 /应用名)
- 端口与防火墙
- 8080(HTTP)与 8000(JDWP)需在云安全组/本机防火墙放行;firewall-cmd --list-ports 可核对
- 类找不到或依赖缺失
- 第三方 JAR 放入 WEB-INF/lib;重启后查看 catalina.out 的 ClassNotFound/NoClassDefFoundError
- JSP 编译错误
- 查看 work/Catalina/… 下对应 *_jsp.java 的错误提示;修正后触发热编译或重启
- 页面缓存导致“改了不生效”
- 浏览器强制刷新(如 Ctrl+Shift+R 或禁用缓存),或在响应头加入 Cache-Control: no-cache, no-store
- 日志过多或过少
- 开发阶段可把 Jasper/EL 调到 FINE/FINER,上线前恢复 INFO;业务日志按级别与滚动策略管理 以上检查点覆盖了部署、网络、编译与运行期最常见的故障面。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: JSP在CentOS上如何进行调试
本文地址: https://pptw.com/jishu/747827.html
