Кодирование в JSP в первый раз, мне нужно отобразить значение переменной в HTML. Похоже, существуют различные способы сделать это; в чем разница между ними (учитывая, что у меня есть переменная с именем foo
)?
<%= foo %>
и
${ foo }
Кодирование в JSP в первый раз, мне нужно отобразить значение переменной в HTML. Похоже, существуют различные способы сделать это; в чем разница между ними (учитывая, что у меня есть переменная с именем foo
)?
<%= foo %>
и
${ foo }
Это, используя старомодный OUTPUT скриптлет который discouraged since a decade,
<%= foo %>
делает в основном так же, как следующее в регулярном скриптлете:
<% out.println(foo); %>
, который в свою очередь, делает в основном так же, как следующее в обычном классе сервлета Java (вы, наверное, уже знаете, JSPs в конечном счете, компилируются и преобразуется в класс сервлета):
response.getWriter().println(foo);
где foo
, таким образом, объявленный как переменная local/instance. Таким образом, он выводит локальную переменную 0xна HTTP-ответ в точно объявленном месте.
Это, используя expression language (EL), который является рекомендованный подход, так JSP 2.0 в 2003 году,
${ foo }
делает в основном так же, как следующее в регулярном скриптлете с PageContext#findAttribute()
:
<%
Object foo = pageContext.findAttribute("foo");
if (foo != null) out.println(foo);
%>
, который в свою очередь эквивалентен:
<%
Object foo = pageContext.getAttribute("foo");
if (foo == null) foo = request.getAttribute("foo");
if (foo == null) foo = session.getAttribute("foo");
if (foo == null) foo = application.getAttribute("foo");
if (foo != null) out.println(foo);
%>
Таким образом, он отображает первое непустое появление атрибута в области страницы/запроса/сеанса/приложения для ответа в точно объявленном месте. Если их нет, то ничего не печатайте. Обратите внимание, что при этом он не печатает буквальную строку «null», когда она null
, напротив того, что scriptlets do.
Пожалуйста, не путайте JSTL с EL. Я исправил теги. Чтобы понять разницу, прочитайте http://stackoverflow.com/tags/jstl/info и http://stackoverflow.com/tags/el/info – BalusC