2013-10-01 5 views
2

Кодирование в JSP в первый раз, мне нужно отобразить значение переменной в HTML. Похоже, существуют различные способы сделать это; в чем разница между ними (учитывая, что у меня есть переменная с именем foo)?

<%= foo %> 

и

${ foo } 
+0

Пожалуйста, не путайте JSTL с EL. Я исправил теги. Чтобы понять разницу, прочитайте http://stackoverflow.com/tags/jstl/info и http://stackoverflow.com/tags/el/info – BalusC

ответ

3

Это, используя старомодный 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.

 Смежные вопросы

  • Нет связанных вопросов^_^