2011-04-17 184 views
0

我正在通过Charles Lyons(第二版)学习SWCD,并且正在回顾一些关于JSP的问题。在页262,以下是一个问题:JSP脚本问题

如果状态脚本变量为true,则以下哪项会导致将值写入响应中,否则会导致“yes”。

A. <%= if (state) { "yes"; } else { "false"; } %>

B. <%=state? "yes" : "no"%>

C. <% if (state) %>yes<%else%>no

D. <% if (state) out.write("yes"); else out.write("no");%>

E. <% state? out.write("yes") : out.write("no");%>

答案为B & D.我明白的解释到给出的答案。然而没有提到A为什么不正确?我不明白为什么A不正确。 任何帮助表示赞赏。

回答

1

这是表达式(<%= expressions %>)和scriptlet(<% code %>)之间的差异。

对于表达式,<%= %>中的任何内容都将被评估为字符串,并且该字符串在JSP转换为servlet时直接插入到servlet的输出流中。所以<%= expressions %>将转换为out.println(expressions)。表达式末尾不应有分号,因为out.println(expressions;)在将JSP转换为servlet后出现语法错误。

对于scriptlet,<% %>中的任何内容都将直接作为原始Java代码插入到生成的Servlet的service方法中。所以<% code(); %>将转换为code();

所以,对于选项A,<%= if (state) { "yes"; } else { "false"; } %>将转换为out.println(if (state) { "yes"; } else { "false"; }),其中有语法错误。所以A不正确

+0

我觉得这里的问题是,如果声明(州){“是“;} else {”false“}会给Java语法错误。感谢您的提示。 – yapkm01 2011-05-14 14:03:19