<c:out escapeXml="false"> 和 scriptlet 的 HTML 输出差异

MN *_*hal 2 html jsp jstl scriptlet

我正在使用 JSTL 从数据库中显示我的数据,其中记录还包含一些特殊字符。当我使用 JSTL 显示我的记录时,如下所示:

<c:out value="${record.fname}" escapeXml="false" />
Run Code Online (Sandbox Code Playgroud)

然后我必须包含escapeXml="false"在我的代码中,以便在我的浏览器窗口中显示特殊字符。但是当我删除它时,它只显示我的 HTML 代码。但是当我使用 scriptlet 显示我的记录时:

<%= record.getFname() %>
Run Code Online (Sandbox Code Playgroud)

它仅自动显示特殊字符,而不显示相应的 HTML 代码。

我想提一下我已经完成了我的工作,但只是有点困惑哪个更好。

Ami*_*rk3 5

c:out将 escapeXml 默认设置为true,这样做的目的之一是避免跨站点脚本,例如阻止执行script或任何其他html标签并将它们显示为文本。因此,您可以说这是 JSTL 中的一个额外功能。如果要将c:out输出呈现为普通 Html 内容,则必须显式设置escapeXml为 false。但是<%= record.getFname() %>,这相当于 plain out.println,它没有这种转义 Html 标签的能力。