Как Struts2 ValueStack заботится о нескольких запросах

Я понимаю ValueStack был введен в Struts2 и еще одно изменение по сравнению с моделью Struts1 теперь является новым ActionObject создается для каждого запроса. Таким образом, мы можем определять переменные экземпляра, не беспокоясь о проблемах с многопоточностью. Способ, которым перехватчики и JSP получают доступ к переменным экземпляра из ActionObjects через ValueStack, Но путь ValueStack реализуется (или, по крайней мере, используется платформой Struts2) ValueStack, чтобы облегчить доступ, чтобы нам не нужно было перебирать все дерево объектов. У меня есть следующие вопросы.

  1. Что если у меня есть встроенные объекты (множественная иерархия объектов)? как механизм доступа ведет себя в таком случае?

  2. Если, скажем, 2 клиента одновременно отправляли запросы на один и тот же актин, и результат выполнения действия различен, поскольку входные данные, предоставленные 2 клиентами, вернулись с 2 разными результатами. Допустим, у моего класса действий есть метод, позволяющий получить лучшую цену, и исходя из логики в моем бэкэнд-сервисе, результаты получаются как 10 и 12 для 2 разных запросов. Сейчас ActionClass имеет переменную-член с именем price, в которой будет храниться это значение, и результирующий JSP showResults.jsp получит доступ к этой переменной (используя тег lib), чтобы показать цену. Как платформа Struts2 гарантирует, что client1 и client2 вернут правильный ответ, и цены не будут перемешаны, пока ответ отображается в JSP, потому что, насколько я понимаю, ValueStack просто идет первым по порядку (логика стека). Таким образом, возможно, в конечном итоге будет возвращено 10 для обоих клиентских запросов, поскольку одна и та же переменная хранится дважды (с одним и тем же именем) в стеке значений, но с разными значениями.

  3. Когда ValueStack уничтожить объект из его списка?

1 ответ

  1. К вложенным объектам или, другими словами, к вложенным компонентам обращаются напрямую через их методы доступа или OGNL, который использовал эти средства доступа при оценке выражения OGNL. Struts2 помещает компонент действия на top из valueStackТаким образом, свойства действия извлекаются по имени, но вложенные bean-компоненты разрешаются с использованием точечной нотации OGNL. Подробнее о OGNL вы можете найти в документации.

  2. Каждый экземпляр действия имеет свой собственный контекст и valueStackтаким образом, клиенты не мешают друг другу и имеют свои собственные значения, если эти значения не поддерживаются в application объем.

  3. valueStack создается диспетчером и помещается в контекст действия. Это также может быть воссоздано некоторыми перехватчиками при необходимости. Не стоит беспокоиться о его значениях, потому что они уничтожаются в конце действия.

Другие вопросы по тегам