在IntelliJ IDEA中debuggingJSP

有谁知道如何在IntelliJ IDEA中debuggingJSP

当我在JSP文件中设置断点时,这些断点似乎不会生效。 debugging器从来没有击中它们。 IDEA似乎认为断点是有效的。 我看到一个红点放在我放置断点的那一行的左边。

我在这篇文章的 IntelliJ论坛上读到, JSP文件需要在web-inf下才能进行debugging。

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

我不确定谁是对的。

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

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

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

(Web)应用程序服务器 :进入“编辑configuration”,你必须添加configuration一个应用程序服务器,而不是像任何其他应用程序一样启动Web服务器。 通过这种方式,Intellij将能够拦截JSP调用。 在应用程序服务器列表中,您应该有默认的Tomcat。 在执行此操作之前,请务必先进行本地Tomcat安装,并在添加Web应用程序服务器时指出这一点。 最后一个技巧是进入“部署”选项卡,并select“部署源”与您在上一步中configuration的相同方面。

如果您想使用其他Web应用程序服务器,则可以使用相同的configuration。我使用最新的Caucho Resin版本进行了testing,并且可以正常debugging(与以前的Intellij和Resin组合无关)。

如果在可用应用程序服务器列表中没有看到Tomcat添加,请检查通用Intellij设置窗格中的插件:在最新版本中,越来越多的function已经变得“可插入”,即使非常基本的function也可能被禁用; 这个插件被称为“Tomcat集成”。

最后,JSP文件需要在WEB-INF下才能被debugging。

对于远程JSPdebugging(也适用于localhost ),您需要安装JSR45 ㄧ 支持插件 。

  1. 转到首选项 > 插件 ,searchJSR45插件,并启用它。
  2. 创build一个运行configuration: 运行 > 运行configuration >点击+button,selectJSR45兼容服务器 ,然后在打开的对话框中select远程 ,并设置服务器主机和端口。 设置应用程序服务器: 通用应该工作正常。
  3. 确保在“ 启动/configuration” >“ debugging”中设置正确的端口。

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

  5. 单击Configuration ...button,然后select包含JSP依赖的bean,类和库的文件夹。

现在,JSP断点应该可以工作,只要在启动服务器时使用正确的debugging参数启动了服务器。

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

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

请确保你的tomcat的conf / web.xml中的 suppressSmap 没有被启用,因为IntelliJ的debugging器需要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 – 用于JSR45debugging的SMAP信息是否应该被抑制? true或false,默认为false。