debugging IntelliJ IDEA中的JSP调试

dkqlctbz  于 2022-12-04  发布在  IntelliJ IDEA
关注(0)|答案(6)|浏览(672)

有人知道如何在IntelliJIDEA中调试JSP吗?
当我在JSP文件中设置断点时,这些断点似乎从未生效。调试器从未命中它们。IDEA似乎认为断点是有效的。我确实看到在我放置断点的行的左侧放置了一个红点。
我在IntelliJ论坛中读到,JSP文件需要在web-inf下才能进行调试。
但是我也读到放在web-inf下的JSP文件不能被用户直接访问。
我不确定谁是对的。

lxkprmvk

lxkprmvk1#

对于Intellij中的JSP调试,有一些配置必须按顺序进行。Intellij总是允许您在JSP行上添加断点的事实并不一定意味着您已经配置了JSP调试。在下面我将参考Intellij 8配置,相对于以前的版本,您将需要执行类似的操作,因为概念是相同的。
要启用JSP调试,必须执行两个步骤:在项目中设置Web应用程序配置并添加Web应用程序服务器配置。

  • Web应用程序配置 *:为了进行JSP调试,您的项目结构中必须有一个“web”面,指向正确的web.xml文件.根据您使用的web应用程序结构的类型,可以由Intellij自动检测这些方面,(无论如何都要检查它已经完成了什么)或者您可能必须手动添加它。记住在“Java EE构建设置”标签中将“创建Web方面展开的目录””;如果您不希望重复,一个技巧就是启用它并指向已经存在的目录。
  • (Web)应用程序服务器 *:进入“编辑配置”,在那里你必须添加一个应用服务器的配置,而不是像其他应用程序一样启动Web服务器。这样Intellij就可以拦截JSP调用。在应用服务器列表中,你应该有一个默认的Tomcat。在你这样做之前,确保有一个本地Tomcat安装。最后一个技巧是转到“部署”选项卡并选择您在上一步中配置的同一个面作为“部署源”。

如果您想使用另一个Web应用服务器,同样的配置也可以工作,我用最新的Caucho Resin版本测试了它,调试工作正常(以前的Intellij和Resin组合没有)。
如果在要添加的可用应用服务器列表中没有看到Tomcat,请检查常规Intellij设置窗格中的插件:在最新的版本中,越来越多的功能已经成为“可插入的,”甚至非常基本的功能也可能被禁用;这个插件叫做“Tomcat集成”。
最后,JSP文件需要在WEB-INF下才能进行调试肯定不是真的。

yhuiod9q

yhuiod9q2#

对于远程JSP调试(也适用于localhost),您需要安装JSR45 support plugin请注意,此功能仅在IntelliJ的Ultimate版本中受支持,社区版本不受支持。
1.转到首选项***〉插件,搜索JSR 45插件,然后启用它。
1.创建运行配置:运行运行配置〉单击
+按钮,并选择
JSR 45兼容服务器***,然后在打开的对话框中,选择远程,并设置服务器主机和端口。设置应用程序服务器:通用应该可以正常工作。
1.确保在
启动/配置
*〉*调试*中设置了正确的端口。
1.打开模块设置(项目文件夹上的
F3
),在Facet下添加Web Facet,并在Web资源目录下指定JSP根文件夹。
1.单击**配置...**按钮,然后选择包含JSP所依赖的Bean、类和库的文件夹。
现在JSP断点应该可以工作了,前提是您使用proper debug arguments启动服务器。

  • 如果您有启用了自动导入的Maven项目,则可能需要禁用自动导入,因为每次触发自动导入时,您的库设置都将重置。*

另请参阅:

qojgxg4l

qojgxg4l3#

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

ggazkfy8

ggazkfy84#

请确保在tomcat的 conf/web.xmlsuppressSmap启用,因为IntelliJ的调试器需要支持JSR 45。
它应该如下所示:

<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 -是否应禁止生成用于JSR 45调试的SMAP信息?true或false,默认值为false。

db2dz4w8

db2dz4w85#

如果使用Intellij调试器,则可以通过在JSP中放置断点并计算表达式this.jspContext.request.getAttribute("attributeName")来获取单个属性的值。
注意这可能会返回一个Java对象类型,你可能需要将它转换为正确的类型。另外,如果你启动一个远程Tomcat,IDEA不会遇到任何断点,所以你需要在IDEA内部以调试模式启动Tomcat。

wnavrhmk

wnavrhmk6#

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

相关问题