Я использую вспомогательный класс в сервлете, чтобы удалить некоторый код из самого сервлета. Я ввожу этот вспомогательный класс в сервлет с помощью CDI @Inject, и он также помечен как bean-компонент @RequestScoped. Поскольку этот вспомогательный класс используется для удаления некоторого кода из сервлета, мне нужен доступ к httprequest, ответу и сеансу в этом классе. Есть ли способ сделать их доступными с помощью инъекции? Я пытался использовать @inject для поля типа HttpServletRequest, но получаю сообщение об ошибке от WELD.
CDI и HttpRequest
comment
Лучшим способом было бы перейти на Java EE 7. Если вы не можете этого сделать, взгляните на эти альтернативы: stackoverflow.com/questions/18189337/ и stackoverflow.com/questions/13419887/
- person helderdarocha   schedule 12.03.2014
comment
@helderdarocha Я использую Glassfish 4.0 ... поэтому я должен использовать Java EE 7.
- person jimny   schedule 12.03.2014
comment
Если вспомогательный класс не имеет состояния, попробуйте пометить его @ApplicationScoped.
- person Adrian Mitev   schedule 13.03.2014
Ответы (1)
Для этого есть несколько альтернативных решений.
Вы можете передать
HttpServletRequest
помощнику. Я имею в виду вместо помощника:@Inject HttpServletRequest request; public Xxx doSomeHelperWork() { // use request }
Сделай это:
public Xxx doSomeHelperWork(HttpServletRequest request) { // use request }
Используйте модуль сервлета DeltaSpike, который может обрабатывать внедрение
HttpServletRequest
.
person
Nikos Paraskevopoulos
schedule
12.03.2014
Спасибо за ваш комментарий. Я уже использовал для этого Google Guice, однако я хотел бы переключиться на CDI и Java EE. Кажется, что-то настолько простое, что это должно быть возможно с CDI
- person jimny; 12.03.2014