一尘不染

开始在IntelliJ IDEA中开始JSP调试

jsp

摘要

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

在下面的servlet测试中 更新

总览

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

设置

A)创建一个新的Web应用程序项目

  1. 从头开始创建一个新项目
  2. 给它起一个名字并将其标识为Java模块
  3. 接受默认src目录
  4. 从“所需技术”列表中选择“ Web应用程序”

这给了我一个标准结构(srcWEB-INF等)默认index.jsp它。

B)向JSP添加了一些简单的代码以输出日期。

C)在代码中放置一个断点。

D)在“ 文件” |“ 配置”中配置我的Web浏览器 设置| 网页浏览器

E)去 跑步| 编辑配置…以及:

  1. 点击了 [+] | Tomcat服务器| 本地
  2. 给它起名字
  3. 单击应用程序服务器下拉列表旁边的 Configure … 按钮(因为我还没有),然后将其指向我的独立Tomcat6服务器(请参见下文),接受所有默认设置
  4. 回到调试配置中,告诉它为此配置部署“战争分解”工件
  5. 在默认的启动URL中添加了一个“?foo = bar”查询字符串,因此:http:// localhost:8080 /?foo = bar(您将在下面看到原因)
  6. 将其他所有内容保留为默认值
  7. 点击确定

运行

  1. 选择 运行| 调试。它很高兴地启动了Tomcat服务器。
  2. 它达到了断点。检查请求显示这是来自user-agent“ Java / 1.6.0_20” 的GET 。它具有上面配置的查询字符串。没有属性,没有参数,只是查询字符串之一。
  3. 单击恢复程序按钮(F9)。
  4. 它再次达到断点。这也从一个GET user-agent“的Java / 1.6.0_20”,但它并 没有 让查询字符串。没有属性,没有参数。
  5. 单击恢复程序按钮(F9)。
  6. 它启动浏览器并再次到达断点。这是来自浏览器的GET(带有查询字符串),看起来非常正常。

我看到有和没有查询字符串的行为,我只是添加了它以查看何时/是否出现。

如果我创建一个类并从JSP中的代码中使用该类,然后将断点移到该类的代码中,则该断点 确实
会全部命中3次,因此,如果该断点在做实际工作(例如,在数据库中查找内容)
),它确实可以完成工作。我想知道这是幻像预编译调用还是其他东西,但是A)不应,B)似乎不是。

使用Servlet运行

我想进一步弄清楚该行为,因此我向项目添加了一个servlet,将其映射到path /foo,并更改了调试配置以触发http://
localhost:8080 / foo?foo =
bar
而不是索引页。我还向项目的根添加了另一个JSP,名为another.jsp。这揭示了非常有趣的行为:

  1. 选择 运行| 调试。它很高兴地启动了Tomcat服务器。
  2. 它在 Servlet 代码中达到了断点。检查请求显示这是来自user-agent“ Java / 1.6.0_20” 的GET 。它具有查询字符串。没有属性,没有参数,只是查询字符串之一。
  3. 单击恢复程序按钮(F9)。
  4. 它到达 index.jsp?! )中的断点。这也从一个GET user-agent“的Java / 1.6.0_20”,但它并 没有 让查询字符串。没有属性,没有参数。请注意,index.jsp与启动路径无关/foo
  5. 单击恢复程序按钮(F9)。
  6. 它启动浏览器并再次到达servlet中的断点。这是来自浏览器的GET(带有查询字符串),看起来非常正常。

永远不会命中another.jsp文件中的断点。因此,我怀疑index.jsp的触发(没有查询字符串)与它是默认的“欢迎文件”有关。因此welcome- file-list,我在web.xml中添加了一个,并将another.jsp设置为唯一welcome- file。果然,现在another.jsp中的断点被命中,而不是index.jsp中的断点。

更多细节

  • 相当通用的Ubuntu 10.04 LTS桌面安装
  • 全新下载并解压缩的IntelliJ IDEA Ultimate安装包(30天试用版)
  • 刚下载并解压缩的独立Tomcat6安装(IDEA不喜欢我通过Synaptic完成的集中安装,拆分目录结构使它困惑,因此我停止了该服务器,仅使用了简单的下载和解压缩版本)
  • Sun的Java 6 JDK

提前致谢!


阅读 3114

收藏
2020-06-08

共1个答案

一尘不染

检查请求显示这是来自用户代理“ Java / 1.6.0_20”的GET。

当您在Tomcat的根目录上部署Web应用程序时,就会发生这种情况。Tomcat服务器的Eclipse插件将/在启动过程中进行自检(它会welcome- file按定义间接加载web.xml)。

你能做什么?可以使用它,也可以在ROOT以外的环境中部署。

2020-06-08