2014-11-02 3 views
1

Чтобы получить запрос сервлета в Struts 2, мы можем использовать либо ServletRequestAware, либо ServletActionContext. Однако в конкретном интернета resource говорится, что вместо ServletActionContext следует использовать ServletRequestAware.Зачем использовать ServletRequestAware вместо ServletActionContext?

Связано ли это с тем фактом, что ServletActionContext будет общим ресурсом в многопоточной среде или есть ли другие причины этого?

ответ

0

ServletActionContext - это вспомогательный класс, содержащий только статические методы, один из которых используется для извлечения запроса сервлета из контекста действия. Но контекст действия - ThreadLocal, поэтому его нельзя использовать в многопоточной среде.

В Struts2 также нет многостраничной среды для каждого запроса, кроме фоновой нити, используемой перехватчиком executeAndWait.

Причина использования ServletRequestAware заключается в том, что гарантированный способ получения объекта запроса сервлета, если в стек включен перехватчик servletConfig.

Вы можете использовать ServletActionContext из любого места, но это не гарантирует возврата объекта запроса вместо null.

4

ServletRequestAware - лучший подход, поскольку он отделяет методы действий от статических аксессуаров.

Чтобы проверить что-то с помощью ServletActionContext, вам нужно издеваться над статическими методами и. Чтобы проверить методы ServletRequestAware, вам нужно только высмеять запрос.

В то время как существуют инструменты, которые упрощают насмешливые статические методы, проще реализовать интерфейс и передать в издеваемом запросе. Это причина ServletRequestAware есть.

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