当使用IntelliJ IDEA调试JSP时,我看到在浏览器发出实际请求之前,该JSP被触发了两次。有人知道为什么吗?
已 在下面的servlet测试中 更新 。
我第一次(有效)使用(评估)IntelliJ IDEA。在进行Web应用程序调试时,我看到一个奇怪的行为,表明我在某处配置错误:如果我在代码中设置了一个断点以响应启动页面而运行,则该代码在启动浏览器之前运行两次,然后第三次响应浏览器请求。我想知道我是否在某个地方出错了(或者如果我没出错,那是怎么回事)。
A)创建一个新的Web应用程序项目
src
这给了我一个标准结构(src,WEB-INF等)默认index.jsp它。
WEB-INF
index.jsp
B)向JSP添加了一些简单的代码以输出日期。
C)在代码中放置一个断点。
D)在“ 文件” |“ 配置”中配置我的Web浏览器 设置| 网页浏览器
E)去 跑步| 编辑配置…以及:
user-agent
我看到有和没有查询字符串的行为,我只是添加了它以查看何时/是否出现。
如果我创建一个类并从JSP中的代码中使用该类,然后将断点移到该类的代码中,则该断点 确实 会全部命中3次,因此,如果该断点在做实际工作(例如,在数据库中查找内容) ),它确实可以完成工作。我想知道这是幻像预编译调用还是其他东西,但是A)不应,B)似乎不是。
我想进一步弄清楚该行为,因此我向项目添加了一个servlet,将其映射到path /foo,并更改了调试配置以触发http:// localhost:8080 / foo?foo = bar而不是索引页。我还向项目的根添加了另一个JSP,名为another.jsp。这揭示了非常有趣的行为:
/foo
永远不会命中another.jsp文件中的断点。因此,我怀疑index.jsp的触发(没有查询字符串)与它是默认的“欢迎文件”有关。因此welcome- file-list,我在web.xml中添加了一个,并将another.jsp设置为唯一welcome- file。果然,现在another.jsp中的断点被命中,而不是index.jsp中的断点。
welcome- file-list
welcome- file
提前致谢!
检查请求显示这是来自用户代理“ Java / 1.6.0_20”的GET。
当您在Tomcat的根目录上部署Web应用程序时,就会发生这种情况。Tomcat服务器的Eclipse插件将/在启动过程中进行自检(它会welcome- file按定义间接加载web.xml)。
/
web.xml
你能做什么?可以使用它,也可以在ROOT以外的环境中部署。