【发布时间】:2013-03-18 00:26:13
【问题描述】:
我一直在尝试了解BalusC's answer 的可调试性,但我仍然无法确切地弄清楚jstl 标记如何比scriptlet 更容易调试。
当我想到调试时,我想到的是单步调试代码并确定在任何给定点将哪些变量加载到内存中并查看其内容的能力。使用 jstl,我无法设置任何类型的断点,如果它的任何部分中断,我正在处理的任何形式的碎片都会丢失。我不确定哪个更糟:空白页面或半加载页面。我见过这样的情况:当 jstl 失败时,表单的其他部分会丢失,而不仅仅是它影响的部分。无论哪种情况,都无法真正看出问题所在。
使用 scriptlet,我可以放置断点,并在 IDE 中查看我想要的任何点。即使我没有使用这样的功能,我也可以将我想查看的任何部分程序打印到控制台,并在以后弄清楚。如果页面失败并显示一个空白页面,尽管这可能很烦人,我至少可以一步一步找出它失败的确切位置。
使用 jstl,我完全一无所知。遍历一个集合真的感觉就像一个黑盒子,你希望一切都正常,而不是真正能够一步一步地观察它的发生。它让你感到无能为力。
我承认,jstl 更简洁,看起来更直观,但我遇到的一个明显问题是无法真正调试页面上的任何内容。我在这里完全错了吗?我只是错过了调试正在发生的事情的好方法吗?还是我的调试方法不正确,需要重新考虑?
我已经用谷歌搜索了这个问题,但我似乎无法找到任何直接的答案......如果有人对此有任何见解,那将非常有帮助。我想使用 jstl 代替 scriptlet,这是让我退缩的一个明显的事情......
【问题讨论】:
-
来自 BalusC 在您的链接中的回答:可调试性:如果 scriptlet 中途抛出异常,您得到的只是一个空白页。这是他唯一提到的部分,从不谈论 JSTL 调试。
-
转储所有域对象可能很有用,但是在开始时查看它们中的内容并在遍历它们并对它们执行操作时查看它们中的内容是不同的故事:)。那么除了转储之外,真的没有更好的办法了吗?
-
我已经按照您所说的做了,这可能是困难的还是容易的,这取决于您如何看待问题。一种常见的技术是Divide and conquer 很多定义,但它们指向相同的想法:将大问题分解成小块,解决每一块,然后解决大问题。所以,一步一步地添加你需要的 JSTL/EL,做一些测试等等。请注意,您可以使用
<c:out>在页面上打印某些内容(例如调试消息)。难吗?也许吧,但如果您将这些概念理解为请求属性等等,那就不是了。