В чем разница между actioncontext и actionInvocation Struts2?
У меня есть небольшая путаница относительно ActionContext и ActionInvocation. Я знаю, что Action Context - это контекст, в котором выполняется Action. Находится ли ActionInvocation в ActionContext, как Session, Value Stack и т. Д.? Во-вторых, создается ли ActionContext при каждом запросе пользователя, поскольку он уникален для каждого потока? Если это так, то стоит ли это слишком дорого, чтобы каждый раз создавать новый контекст действия для каждого запроса пользователя?
2 ответа
Разница между Struts 2 ActionContex и Action Invocation
ActionContext - это контейнер объектов, в котором выполняется действие. Значения, хранящиеся в ActionContext, являются уникальными для каждого потока (т. Е. ThreadLocal). Поэтому нам не нужно делать поток действий безопасным.
Мы можем получить ссылку на ActionContext, вызвав метод getContext() класса ActionContext. Это статический фабричный метод. Например: ActionContext context = ActionContext.getContext();
Действие Invocatioin:-
ActionInvocation представляет состояние выполнения действия. Он содержит объекты действия и перехватчики.
Структура Struts предоставляет интерфейс ActionInvocation для работы с ActionInvocation. Он предоставляет множество методов, некоторые из которых можно использовать для получения экземпляра ValueStack, ActionProxy, ActionContext, Result и т. Д. Методы интерфейса ActionInvocation. Обычно используются следующие методы интерфейса ActionInvocation:
1) public ActionContext getInvocationContext () возвращает объект ActionContext, связанный с ActionInvocation.
2) public ActionProxy getProxy () возвращает экземпляр ActionProxy, содержащий эту ActionInvocation.
3) public ValueStack getStack () возвращает экземпляр ValueStack.
4) public Action getAction () возвращает экземпляр Action, связанный с этим ActionInvocation.
5) public void invoke () вызывает следующий ресурс при обработке этого ActionInvocation.
6) public Result getResult () возвращает экземпляр Result.
Так как у вас есть представление о ActionContext
в качестве контекста, в котором выполняется Действие, и для выполнения Действие нам также необходим Invocation. Это часть ActionContext, и у вас есть все, чтобы получить ActionInvocation
из контекста
public ActionInvocation getActionInvocation()
Контексты используют ThreadLocals, что означает, что значения, хранящиеся в ActionContext, являются уникальными для каждого потока. Ну, для меня это не лишние затраты, так как в другом случае вы должны убедиться, что все, к чему обращаются в многопоточном приложении, является безопасным для потоков. ActionContext
будет создан для каждого запроса.