代码之家  ›  专栏  ›  技术社区  ›  T.J. Crowder

IntelliJ思想中JSP调试的断断续续

  •  3
  • T.J. Crowder  · 技术社区  · 14 年前

    摘要

    当使用IntelliJ IDEA调试JSP时,我看到JSP在浏览器的实际请求之前被触发了两次。有人知道为什么吗?

    下面是servlet测试。

    概述

    我第一次使用(有效地)IntelliJ思想。在进行web应用程序调试时,我看到了一个奇怪的行为,这表明我在某个地方配置有错误:如果我在代码中设置了一个断点,该断点将在响应启动页时运行,则该代码在启动浏览器之前运行两次,然后在响应浏览器请求时运行第三次。我想知道我是否在某个地方出了差错(或者如果我没有出差错,那是怎么回事)。

    设置

    1. 从头开始创建新项目
    2. 接受违约 src 目录
    3. 从所需技术列表中选择“Web应用程序”

    src公司 , WEB-INF 等)违约 index.jsp 在里面。

    B) 在JSP中添加了一些简单的代码来输出日期。

    C) 在代码中放置断点。

    文件设置Web浏览器

    E) 去了 运行编辑配置。。。 以及:

    1. 点击
    2. 给它起了名字
    3. 点击 配置。。。 按钮旁边的下拉列表的应用服务器(因为我还没有任何),并指向我的独立Tomcat6服务器(见下文),接受所有默认值
    4. 加了一个“?foo=bar“查询字符串到默认启动URL,因此: http://localhost:8080/?foo=bar (你将在下面看到原因)
    5. 其他都默认了

    跑步

    1. 选择 . 它很高兴地启动了Tomcat服务器。
    2. 它击中了断点。检查请求表明这是一个GET from user-agent “Java/1.6.0_20”。上面配置了查询字符串。没有属性,除了查询字符串1之外没有其他参数。
    3. 它再次击中断点。这也是从 用户代理 “Java/1.6.0_20”,但它确实是
    4. 单击“继续程序”按钮(F9)。
    5. 它启动浏览器并再次点击断点。这是一个来自浏览器的GET(带有查询字符串),看起来非常正常。

    我看到了包含和不包含查询字符串的行为,我只是添加了它来查看它何时/是否出现。

    如果我创建一个类并使用JSP中的代码中的该类并将断点移到该类的代码中,则该断点

    使用Servlet运行

    我想进一步梳理行为,所以我向项目添加了一个servlet,将其映射到路径 /foo ,并将调试配置更改为触发器 http://localhost:8080/foo?foo=bar 而不是索引页。我还将另一个JSP添加到项目的根目录下,称为another.JSP。这揭示了非常有趣的行为:

    1. 运行|调试
    2. 它在 代码。检查请求表明这是一个GET from 用户代理 “Java/1.6.0_20”。它有查询字符串。没有属性,除了查询字符串1之外没有其他参数。
    3. 单击“继续程序”按钮(F9)。
    4. 它在 index.jsp索引 用户代理 具有查询字符串。没有属性,没有参数。注意index.jsp与启动路径无关 .
    5. 单击“继续程序”按钮(F9)。

    另一个.jsp文件中的断点永远不会被命中。所以我怀疑index.jsp的触发(没有查询字符串)与它是默认的“欢迎文件”有关 welcome-file-list 并将另一个.jsp设置为 welcome-file

    更多细节

    • 相当通用的Ubuntu 10.04lts桌面安装
    • 新下载和解包的IntelliJ IDEA Ultimate安装(30天试用)
    • Sun的Java 6 JDK

    提前谢谢!

    1 回复  |  直到 14 年前
        1
  •  4
  •   T.J. Crowder    14 年前

    检查该请求表明这是一个来自用户代理“Java/1.6.0_20”的GET。

    在Tomcat的根目录下部署webapp时会发生这种情况。Tomcat服务器Eclipse插件将在 / 启动期间(间接加载 welcome-file 定义见 web.xml ).