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映射条目。


    推荐阅读

      linux改文件权限命令?

      linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,

      linux命令交换文件名?

      linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,

      linux下替换文件命令?

      linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内

      linux寻找文件夹命令?

      linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,

      linux把文件复制命令?

      linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文

      linux文件夹合并命令?

      linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数

      linux下文件创建命令?

      linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,

      linux命令行安装文件?

      linux命令行安装文件?,软件,官网,密码,中心,电脑,文件,命令,终端,指令,版本,L

      linux解压文件命令行?

      linux解压文件命令行?,系统,电脑,命令,文件,平台,名称,软件,管理,标准,目录,

      linux命令编辑文件?

      linux命令编辑文件?,系统,状态,电脑,命令,数据,标准,不了,名称,发行,网络,Lin

      linux文件乱码命令?

      linux文件乱码命令?,系统,环境,乱码,信息,状态,盘中,文件,字符集,中文,文件

      linux命令长度设置?

      linux命令长度设置?,地址,工作,命令,管理,环境,系统,信息,目录,文件,参数,Lin

      linux的删除文件命令?

      linux的删除文件命令?,名称,不了,系统,文件夹,命令,文件,环境,档案,目录,指

      linux赋值文件命令?

      linux赋值文件命令?,标准,数据,系统,状态,命令,赋值,变量,权限,文件,脚本,lin

      linux备份文件的命令?

      linux备份文件的命令?,系统,设备,网络,工具,平台,名称,备份,文件,命令,目录,l

      linux双ip设置命令?

      linux双ip设置命令?,地址,系统,代码,网络,设备,服务,通讯,名称,信息,密码,lin

      linux命令创建文件加?

      linux命令创建文件加?,名字,管理,系统,名称,密码,首次,命令,文件,文件夹,位

      linux文件基础命令?

      linux文件基础命令?,地址,基础,管理,命令,情况,系统,工作,标准,单位,网络,lin

      linux命令性文件乱码?

      linux命令性文件乱码?,乱码,状态,软件,环境,文件,中文,字符集,问题,命令,内