如何在NetBeans与GlassFish中调试JSP代码?
解决GlassFish下NetBeans无法调试JSP中Java代码的问题
我之前切换到GlassFish时也碰到过一模一样的JSP调试问题,给你几个实用的排查和解决步骤:
1. 确认GlassFish以调试模式启动
- 首先确保你在NetBeans中启动GlassFish时选择的是Debug模式,而非普通的Run模式。
- 检查GlassFish的域名配置:打开
glassfish/domains/[你的域名]/config/domain.xml,确认<java-config>下的debug-options处于开启状态,默认配置应该类似这样:
如果端口9009被占用,可以改成其他未被使用的端口,同时在NetBeans的服务器配置里同步修改调试端口。<java-config debug-options="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009" ...>
2. 开启GlassFish的JSP调试编译参数
GlassFish默认的JSP编译优化会丢弃调试信息,需要手动开启:
- 找到GlassFish安装目录下的
glassfish/domains/[你的域名]/config/web.xml - 找到名为
jsp的Servlet配置,添加两个初始化参数:<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <!-- 添加以下两个参数 --> <init-param> <param-name>compiler.debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>compiler.generate.classes</param-name> <param-value>true</param-value> </init-param> <!-- 保留原有其他参数 --> </servlet> - 修改完成后重启GlassFish,确保JSP编译时生成带调试符号的class文件。
3. 检查Maven项目的调试配置
- 打开Web模块的
pom.xml,确认maven-compiler-plugin的配置中开启了调试:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <!-- 替换为你的JDK版本 --> <target>1.8</target> <debug>true</debug> <debuglevel>lines,vars,source</debuglevel> </configuration> </plugin> - 右键Web项目 -> Properties -> Build -> Compiling,确认“Generate debugging info”处于勾选状态。
4. 清理重建并重新部署
旧的编译文件很可能是问题根源:
- 在NetBeans中右键整个企业应用项目,选择Clean and Build
- 手动删除GlassFish部署目录下的旧应用:
glassfish/domains/[你的域名]/applications/[你的应用名称] - 重新部署项目到GlassFish,确保新的带调试信息的文件被部署。
5. 确认断点设置正确
- JSP中的Java代码断点要打在
<% %>标签内部的代码行上,不要打在HTML部分 - 先访问一次目标JSP(触发JSP编译),再尝试调试——因为JSP是首次访问时才会编译成class文件,提前打断点可能无法关联到编译后的代码
内容的提问来源于stack exchange,提问作者Edwin Santos
相关产品推荐
相关产品推荐

