2013-12-06 4 views
1

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

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

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

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

ответ

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

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

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

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