gpt4 book ai didi

debugging - 开始在IntelliJ IDEA中开始JSP调试

转载 作者:行者123 更新时间:2023-12-03 08:16:27 24 4
gpt4 key购买 nike

摘要

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

已在下面的servlet测试中更新。

总览

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

设置

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


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


这给了我一个标准结构(srcWEB-INF等),其中带有默认的index.jsp

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

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

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

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


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


运行


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


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

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

使用Servlet运行

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


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


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

更多细节


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


提前致谢!

最佳答案

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


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

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

关于debugging - 开始在IntelliJ IDEA中开始JSP调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com