CDI и HttpRequest

Я использую вспомогательный класс в сервлете, чтобы удалить некоторый код из самого сервлета. Я ввожу этот вспомогательный класс в сервлет с помощью CDI @Inject, и он также помечен как bean-компонент @RequestScoped. Поскольку этот вспомогательный класс используется для удаления некоторого кода из сервлета, мне нужен доступ к httprequest, ответу и сеансу в этом классе. Есть ли способ сделать их доступными с помощью инъекции? Я пытался использовать @inject для поля типа HttpServletRequest, но получаю сообщение об ошибке от WELD.


person jimny    schedule 11.03.2014    source источник
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)


Для этого есть несколько альтернативных решений.

  1. Вы можете передать HttpServletRequest помощнику. Я имею в виду вместо помощника:

    @Inject HttpServletRequest request;
    
    public Xxx doSomeHelperWork() {
        // use request
    }
    

    Сделай это:

    public Xxx doSomeHelperWork(HttpServletRequest request) {
        // use request
    }
    
  2. Используйте модуль сервлета DeltaSpike, который может обрабатывать внедрение HttpServletRequest.

person Nikos Paraskevopoulos    schedule 12.03.2014
comment
Спасибо за ваш комментарий. Я уже использовал для этого Google Guice, однако я хотел бы переключиться на CDI и Java EE. Кажется, что-то настолько простое, что это должно быть возможно с CDI - person jimny; 12.03.2014