Java 在JSTL/JSP中,何时必须使用<;c:输出值=“输出值”${myVar}"/&燃气轮机;我什么时候可以说${myVar}

Java 在JSTL/JSP中,何时必须使用<;c:输出值=“输出值”${myVar}"/&燃气轮机;我什么时候可以说${myVar},java,jsp,jstl,el,Java,Jsp,Jstl,El,我一直在我的JSP代码中这样做: <c:out value="${myVar}"/> 它在没有的情况下工作 也许这是因为我的页面声明如下: <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %> 所以,我的问题是,我可以用这个较短的版本替换代码中的?是否有任何理由继续使用?或者在某些地方我可能仍然需要它?

我一直在我的JSP代码中这样做:

<c:out value="${myVar}"/>
它在没有
的情况下工作

也许这是因为我的页面声明如下:

<%@ page language="java" contentType="text/html; 
charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>

所以,我的问题是,我可以用这个较短的版本替换代码中的
?是否有任何理由继续使用
?或者在某些地方我可能仍然需要它?

不仅仅是输出文本。它逃避HTML特殊字符。每当您不能绝对确定文本是否包含以下任何字符时,请使用它(
或${fn:escapeXml()}
):
“,”,&
。否则,您将遇到无效的HTML(最好的情况)、断页或跨站点脚本攻击(最坏的情况)

我会给你一个简单的例子,让你明白。如果你开发了一个论坛,有人发布了以下消息,而你没有使用
来显示此消息,那么你就会遇到问题:

<script>while (true) alert("you're a loser");</script>
while(true)alert(“你是个失败者”);
也许这是因为我的页面声明如下:

<%@ page language="java" contentType="text/html; 
charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>

不正确。只要
就足够了。剩余部分已经是默认值

从JSP 2.0开始,模板文本中的EL就得到了支持,JSP 2.0与Servlet 2.4一起使用(Servlet 2.4自2003年就已经推出了,请随时更新)。因此,当您运行支持Servlet 2.4的容器(例如Tomcat 5.5或更高版本)时使用
web.xml
声明的符合Servlet2.4API,您将能够在模板文本中使用EL


但是,您不应该使用它来(重新)显示用户控制的输入。因此,不要使用它来(重新)显示(保存的)请求头、请求cookie、请求URL、请求参数、请求正文等。这将为。

“更松散”?我想您的意思是“失败者”“。这是否也适用于不直接向页面输出内容的情况(例如:
)。在这种情况下,
${someVal}
是否也应转义?或者,您只需要在打印到页面时担心转义(例如:
),而只需要在打印到页面时担心转义。
<%@ page language="java" contentType="text/html; 
charset=utf-8" pageEncoding="utf-8" isELIgnored="false" %>