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