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

guo*_*opi 5 java debugging jsp intellij-idea

我可以在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");
        }
    }
%>
Run Code Online (Sandbox Code Playgroud)

在上面的jsp文件中,我在“ out.print(” test1“);”处设置断点。但它不会中断。

如何调试InnerClass?谢谢。

Dro*_*out 1

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

\n

检查您的服务器是否兼容JSR45的调试。

\n

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

\n
\n

对于 Intellij 中的 JSP 调试,有一些配置必须按顺序进行。Intellij 始终允许您在 JSP 行上添加断点这一事实并不一定意味着您\xe2\x80\x99 已经配置了 JSP 调试。下面我参考Intellij 8配置,对于以前的版本,您将需要执行类似的操作,因为概念是相同的。

\n

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

\n

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

\n

(Web)应用程序服务器:转到\xe2\x80\x9ceditconfigurations\xe2\x80\x9d,您必须在配置中添加应用程序服务器,而不是像其他应用程序一样将Web服务器作为应用程序启动。这样Intellij就能够拦截JSP调用。在应用程序服务器列表中,您应该有默认的 Tomcat。在执行此操作之前,请确保已安装本地 Tomcat,并在添加 Web 应用程序服务器时指向该安装。最后一个技巧是转到 \xe2\x80\x9cDeployment\xe2\x80\x9d 选项卡,然后选择您在上一步中配置的相同方面作为 \xe2\x80\x9cDeployment source\xe2\x80\x9d。

\n

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

\n

如果您没有在要添加的可用应用程序服务器列表中看到 Tomcat,请检查常规 Intellij 设置窗格中的插件:在最新版本中,越来越多的功能已变为 xe2x80x9cpluggablexe2 \x80\x9d,甚至非常基本的功能也可能被禁用;这个插件名为\xe2\x80\x9cTomcat集成\xe2\x80\x9d。

\n

最后,JSP 文件需要位于 WEB-INF 下才能进行调试肯定是不正确的。

\n

来源:IntelliJ IDEA 中的 JSP 调试

\n
\n

也在这里如果您还没有全部准备好,

\n