来自<c:out escapexml =“false”>和scriptlet的HTML输出的差异

时间:2015-07-29 09:28:25

标签: html jsp jstl scriptlet

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

2) Is a separate instance of Sqlite created for each application? Coz if not,I can make a guess for a tablename created by any other application and delete it all together,isn't it? I just dont get it?

然后我必须在我的代码中包含<c:out value="${record.fname}" escapeXml="false" /> ,以便在我的浏览器窗口中显示特殊字符。但是当我删除它时,它只显示了HTML代码。但是当我使用scriptlet显示我的记录时如下:

escapeXml="false"

它只会自动显示特殊字符,而不是显示HTML代码。

我想提一下我已经完成了我的工作,但只是稍微混淆了哪一个更好。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

仅在访问内部参数(而不是在URL上指定的参数或属性)时将escapeXML属性设置为false。使用未转义的URL参数时,页面容易受到XSS攻击。