在Intellij Idea中调试JSP中的内部类

5

我能在JSP中调试内部类吗?

我的应用服务器是Tomcat,我正在使用Intellij Idea。

在JSP中普通的断点是可以的,但是内部类的断点却不起作用。

以下是我的测试JSP代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.IOException" %>
<%
    new InnerClass().method_in_inner_class(out);
%>
<%!
    class InnerClass {
        void method_in_inner_class(JspWriter out) throws IOException {
            //set breakpoint under this line
            out.print("test1");
        }
    }
%>

在上面的jsp文件中,我在“out.print(“test1”);”处设置了断点,但它没有在该行停止。
如何调试InnerClass? 谢谢。

只有断点1可以中断... 这是因为在这个例子中,您从未调用断点2的代码。 - Moshe Katz
“method_in_inner_class”的代码不是调用“method_in_jsp_class”吗? - vikingsteve
你可以将我的测试代码复制到你的开发环境中,并尝试进行调试。谢谢。 - guopi
我在IntelliJ IDEA 13中尝试了,但问题仍然存在。 - guopi
1个回答

1
你的代码看起来没问题,除了第二个断点无法工作,因为该方法仅从 method_in_inner_class 中调用。问题在于调试JSP有点棘手,因为你不是在调试Java类。
检查你的服务器是否兼容 JSR45 调试。
如果兼容,请确保你已正确配置IDE和服务器:
对于在Intellij中进行JSP调试,必须要进行一些配置。事实上,Intellij总是允许您在JSP行上添加断点,并不一定意味着您已经配置了JSP调试。以下内容是关于Intellij 8配置的,关于以前的版本,您需要执行类似的操作,因为概念是相同的。
为了启用JSP调试,您必须执行两个步骤:在项目中设置Web应用程序配置并添加Web应用程序服务器配置。
Web应用程序配置:为了进行JSP调试,您必须在项目结构中有一个“Web”facet,指向正确的web.xml文件。根据您使用的Web应用程序结构类型,Intellij可能会自动检测到该facet(无论如何,请检查它所做的内容),或者您可能需要手动添加它。请记住,在“Java EE构建设置”选项卡中将“创建Web facet exploded directory”设置为可用;如果您不想重复,一个技巧就是启用它并指向您已经存在的目录。
(Web)应用程序服务器:转到“编辑配置”,在那里,您必须添加应用程序服务器配置,而不是像其他应用程序一样启动Web服务器作为应用程序。这样,Intellij将能够拦截JSP调用。在应用程序服务器列表中,您应该有默认的Tomcat。在添加Web应用程序服务器时,请确保在此之前安装了本地Tomcat,并指向该服务器。最后一个技巧是转到“部署”选项卡,并将“Deployment source”选择为您在上一步中配置的相同facet。
如果您在可添加的应用程序服务器列表中看不到Tomcat,请检查Intellij通用设置面板中的插件:在最新版本中,越来越多的功能已经变成了“可插拔”,甚至可以禁用非常基本的功能;此插件称为“Tomcat integration”。
最后,JSP文件需要位于WEB-INF下才能进行调试,这显然是不正确的。
来源: IntelliJ IDEA中的JSP调试 此外在这里也许对您有些有趣的配置,如果您还没有完成它。

我的应用服务器是Tomcat。 普通断点可以正常工作,但在内部类中的断点无法生效。 我已经简化了测试代码。 - guopi
method_in_inner_classmethod1,对吗?你看到了交叉的断点符号吗?它们是否表示断点由于不属于任何类而无法到达? - Dropout
我的错,我纠正了错误。 IDEA显示断点没问题,但是在调试时无法停在那个位置。 常规位置的断点可以正常工作。 - guopi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接