c:out嵌套的内部元素属性

Rya*_*yan 8 java jsp jstl

嵌套ac:out元素属性中的JSTL标记是一个好习惯还是使用c:out的var属性通常是首选的?它似乎工作在任何一种方式,但我怀疑嵌套它可能无法在某些应用程序服务器或JSP版本中工作(它只是看起来不对).

例如,一个输入元素,其值在验证失败时恢复,并具有特殊字符转义:

<input type="text" name="firstname" value="<c:out value="${param.firstname}"/>"/>
Run Code Online (Sandbox Code Playgroud)

与:

<c:out value="${param.firstname}" var="firstname"/>
<input type="text" name="firstname" value="${firstname}"/>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 15

防止HTML元素属性中的XSS攻击而不会通过嵌套<c:out>标记干扰格式良好的XML语法的常见做法是使用fn:escapeXml()函数:

<input type="text" name="firstname" value="${fn:escapeXml(param.firstname)}"/>
Run Code Online (Sandbox Code Playgroud)

  • 不在HTML元素属性中,没有.在它之外,这取决于.对于一些开发人员而言,`<c:out value ="$ {bean.foo}"/>`比`$ {fn:escapeXml(bean.foo)}`更具可读性.或者,您也可以继续使用像JSF这样的MVC框架,这样您就不必担心这个问题(以及servlet中所有其他重复的样板文件). (3认同)