51

有谁知道如何JSPIntelliJ IDEA 中调试?

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

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

但后来我也读到了JSP放在 web-inf 下的文件不会被用户直接访问。

我不确定谁是对的。

4

6 回答 6

35

对于 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 下才能调试肯定不是真的。

于 2009-08-26T07:38:13.113 回答
27

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

  1. 转到Preferences > Plugins,搜索JSR45插件并启用它。
  2. 创建运行配置:Run > Run Configuration > 单击按钮,然后选择JSR45 Compatible Server,然后在打开的对话框中选择Remote,并设置服务器主机和端口。设置应用程序服务器:通用应该可以正常工作。 +
  3. 确保在Startup/Configuration > Debug中设置了正确的端口。

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

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

现在 JSP 断点应该可以工作了,前提是您使用正确的调试参数启动了您的服务器。

如果您有一个启用了自动导入的 Maven 项目,那么您可能希望禁用自动导入,因为每次触发自动导入时,您的库设置都会被重置。

于 2014-05-21T11:01:20.587 回答
6

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

于 2009-09-15T07:14:51.997 回答
1

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

它应该如下所示:

<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 - 是否应该禁止为 JSR45 调试生成 SMAP 信息?真假,默认假。

于 2016-03-04T09:33:25.723 回答
1

如果您使用 Intellij 调试器,您可以通过在 JSP 中放置断点并计算表达式来获取单个属性的值this.jspContext.request.getAttribute("attributeName")

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

于 2018-02-22T15:26:30.057 回答
0

对于您问题的第二部分(“用户无法直接访问 web-inf 下的 jsp 文件”),这是正确的。为了允许用户访问 WEB-INF 文件夹中的 JSP 文件,需要在每个 JSP 页面的 web.xml 文件中创建 servlet 和 servlet-mapping 条目。

于 2008-08-29T02:44:07.717 回答