【问题标题】:Debug inner class in JSP in Intellij Idea在 Intellij Idea 中调试 JSP 中的内部类
【发布时间】:2013-12-12 12:59:01
【问题描述】:

我可以在 JSP 中调试到内部类吗?

我的应用服务器是tomcat,我用的是Intellij Idea。

jsp中的正常断点可以,但是InnerClass中的断点不起作用。

在我的测试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 ? 谢谢。

【问题讨论】:

  • "Only breakpoint 1 can break..." - 这是因为,在这个例子中,你从不调用断点 2 的代码。
  • “method_in_inner_class”的代码不是调用“method_in_jsp_class”吗?
  • 你可以将我的测试代码复制到你的idea环境中,尝试调试。谢谢。
  • 我在 IntelliJ IDEA 13 中尝试过,但问题仍然存在。

标签: java jsp debugging intellij-idea


【解决方案1】:

您的代码似乎没问题,除了第二个断点也不起作用,因为该方法仅从method_in_inner_class 调用。问题是调试 JSP 有点棘手,因为您不是在调试 Java 类。

根据JSR45检查你的服务器是否兼容调试。

如果是,请确保您已正确配置您的 IDE 和服务器:

对于 Intellij 中的 JSP 调试,必须按顺序进行一些配置。 Intellij 总是允许您在 JSP 行上添加断点这一事实并不一定意味着您已经配置了 JSP 调试。在下文中,我指的是 Intellij 8 配置,w.r.t。以前的版本需要做类似的操作,因为概念是一样的。

为了启用 JSP 调试,您必须执行两个步骤:在项目中设置 Web 应用程序配置和添加 Web 应用程序服务器配置。

Web 应用程序配置:为了进行 JSP 调试,您的项目结构中必须有一个“web”方面,指向正确的 web.xml 文件。根据您使用的 Web 应用程序结构的类型,Intellij 可能会自动检测到构面(无论如何都要检查它做了什么),或者您可能必须手动添加它。请记住在“Java EE 构建设置”选项卡中设置为可启用的“创建 Web 构面展开目录”;如果你不想重复,一个技巧就是启用它并指向你已经存在的目录。

(Web)应用程序服务器:进入“编辑配置”,您必须在配置中添加应用程序服务器,而不是像其他任何应用程序一样启动 Web 服务器。这样,Intellij 将能够拦截 JSP 调用。在应用程序服务器列表中,您应该拥有默认的 Tomcat。确保在执行此操作之前已安装本地 Tomcat,并在添加 Web 应用程序服务器时指向它。最后一个技巧是转到“部署”选项卡并选择您在上一步中配置的相同构面作为“部署源”。

如果您想使用另一个 Web 应用程序服务器,相同的配置也可以工作,我使用最新的 Caucho Resin 版本对其进行了测试,并且调试工作正常(以前的 Intellij 和 Resin 组合没有)。

如果您在要添加的可用应用程序服务器列表中没有看到 Tomcat,请检查通用 Intellij 设置窗格中的插件:在最新版本中,越来越多的功能已成为“可插拔”,甚至是非常基本的功能可能被禁用;这个插件叫做“Tomcat 集成”。

最后,JSP 文件必须在 WEB-INF 下才能调试肯定不是真的。

来源:JSP debugging in IntelliJ IDEA

如果你还没有准备好,here 可能对你来说是一些有趣的配置。

【讨论】:

  • 我的应用服务器是tomcat。正常断点是可以的,但是 InnerClass 中的断点不起作用。我简化了我的测试代码。
  • method_in_inner_classmethod1,对吗?你得到交叉断点符号吗?他们是否说由于不属于任何类而无法访问断点?
  • 我的错,我纠正了错误。 IDEA说断点没问题,但是,调试的时候,可以停在那个位置。正常位置的断点有效。
猜你喜欢
  • 2010-09-07
  • 2012-05-05
  • 2019-11-28
  • 2019-04-23
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多