2011-04-17 107 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