IntelliJ IDEA中的JSP调试

IntelliJ IDEA中的JSP调试

JSP debugging in IntelliJ IDEA

有谁知道如何在IntelliJ IDEA中调试JSP

当我在JSP文件中设置断点时,这些断点似乎永远不会生效。 调试器从不击中它们。 IDEA似乎认为断点是有效的。 我确实在放置断点的行的左侧看到了一个红点。

我在这篇文章的IntelliJ论坛中读到,JSP文件需要位于web-inf下才能调试工作。

但是随后我又读到,放置在web-inf下的JSP文件将不能被用户直接访问。

我不确定谁是正确的。


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

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

Web应用程序配置:为了进行JSP调试,您的项目结构中必须有一个" web"构面,指向正确的web.xml文件。根据所使用的Web应用程序结构的类型,Intellij可能会自动检测该构面(无论如何都要检查它是否完成了操作),或者您可能必须手动添加它。记住在" Java EE构建设置"选项卡中将其设置为"创建Web Facet分解目录"。如果您不希望重复,那么一个诀窍就是启用它并指向您已经存在的目录。

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

如果您要使用其他Web应用程序服务器,则可以使用相同的配置,我在最新的Caucho Resin版本中对其进行了测试,并且调试工作正常(不适用于以前的Intellij和Resin组合)。

如果在要添加的可用应用程序服务器列表中没有看到Tomcat,请检查Intellij常规设置窗格中的插件:在最新版本中,越来越多的功能已变为"可插拔",甚至可能禁用了非常基本的功能。 ;该插件称为" Tomcat集成"。

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


对于远程JSP调试(这也适用于localhost),您需要安装JSR45ㄧ支持插件。请注意,此功能仅在IntelliJ的Ultimate版中受支持,而在社区版中不受支持。

  • 转到"首选项">"插件",搜索JSR45插件,然后
    启用它。
  • 创建运行配置:运行>运行配置>单击 + 按钮,然后选择" JSR45兼容服务器",然后在打开的对话框中选择"远程",并设置服务器主机和端口。设置应用服务器:通用应该可以正常工作。
  • 确保在"启动/配置">"调试"中设置正确的端口。

  • 打开模块设置(在项目文件夹上为F3),然后在Facets下添加一个Web Facet,然后在Web Resource Directories下指定您的JSP根文件夹。

  • 单击Configuration ... 按钮,然后选择包含JSP所依赖的bean,类和库的文件夹。

  • 现在,只要您使用适当的调试参数启动服务器,JSP断点就可以正常工作。


    无论如何,您需要在IDEA中启动Tomcat,而不是从远程Tomcat中启动。


    请确保,在您的tomcat的conf / web.xml上未启用preventSmap,因为IntelliJ的调试器需要对JSR45的支持。

    它看起来应该像这样:

    1
    2
    3
    4
    <init-param>
      <param-name>suppressSmap</param-name>
      <param-value>false</param-value>
    </init-param>

    来自https://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html

    suppressSmap - Should the generation of SMAP info for JSR45 debugging be suppressed? true or false, default false.


    如果使用的是Intellij调试器,则可以通过在JSP内放置一个断点并评估表达式this.jspContext.request.getAttribute("attributeName")来获取单个属性的值。

    请注意,这可能会返回Java Object类型,并且您可能必须将其强制转换为正确的类型。 另外,如果您启动远程Tomcat,则IDEA不会遇到任何断点,因此您需要从IDEA内部以调试模式启动Tomcat。


    对于问题的第二部分("放置在web-inf下的jsp文件将不能被用户直接访问"),这是正确的。为了允许用户访问WEB-INF文件夹中的JSP文件,需要在每个JSP页面的web.xml文件中创建servlet和servlet映射条目。


    推荐阅读