我正在使用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代码。
我想提一下我已经完成了我的工作,但只是稍微混淆了哪一个更好。
答案 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攻击。