Как Struts2 ValueStack заботится о нескольких запросах
Я понимаю ValueStack
был введен в Struts2 и еще одно изменение по сравнению с моделью Struts1 теперь является новым ActionObject
создается для каждого запроса. Таким образом, мы можем определять переменные экземпляра, не беспокоясь о проблемах с многопоточностью. Способ, которым перехватчики и JSP получают доступ к переменным экземпляра из ActionObjects
через ValueStack
, Но путь ValueStack
реализуется (или, по крайней мере, используется платформой Struts2) ValueStack
, чтобы облегчить доступ, чтобы нам не нужно было перебирать все дерево объектов. У меня есть следующие вопросы.
Что если у меня есть встроенные объекты (множественная иерархия объектов)? как механизм доступа ведет себя в таком случае?
Если, скажем, 2 клиента одновременно отправляли запросы на один и тот же актин, и результат выполнения действия различен, поскольку входные данные, предоставленные 2 клиентами, вернулись с 2 разными результатами. Допустим, у моего класса действий есть метод, позволяющий получить лучшую цену, и исходя из логики в моем бэкэнд-сервисе, результаты получаются как 10 и 12 для 2 разных запросов. Сейчас
ActionClass
имеет переменную-член с именем price, в которой будет храниться это значение, и результирующий JSPshowResults.jsp
получит доступ к этой переменной (используя тег lib), чтобы показать цену. Как платформа Struts2 гарантирует, что client1 и client2 вернут правильный ответ, и цены не будут перемешаны, пока ответ отображается в JSP, потому что, насколько я понимаю,ValueStack
просто идет первым по порядку (логика стека). Таким образом, возможно, в конечном итоге будет возвращено 10 для обоих клиентских запросов, поскольку одна и та же переменная хранится дважды (с одним и тем же именем) в стеке значений, но с разными значениями.Когда
ValueStack
уничтожить объект из его списка?
1 ответ
К вложенным объектам или, другими словами, к вложенным компонентам обращаются напрямую через их методы доступа или OGNL, который использовал эти средства доступа при оценке выражения OGNL. Struts2 помещает компонент действия на
top
изvalueStack
Таким образом, свойства действия извлекаются по имени, но вложенные bean-компоненты разрешаются с использованием точечной нотации OGNL. Подробнее о OGNL вы можете найти в документации.Каждый экземпляр действия имеет свой собственный контекст и
valueStack
таким образом, клиенты не мешают друг другу и имеют свои собственные значения, если эти значения не поддерживаются вapplication
объем.valueStack
создается диспетчером и помещается в контекст действия. Это также может быть воссоздано некоторыми перехватчиками при необходимости. Не стоит беспокоиться о его значениях, потому что они уничтожаются в конце действия.