Как получить объект ServletContext в простом файле класса? - PullRequest
8 голосов
/ 28 апреля 2010

Я создаю простое веб-приложение. Мне нужно получить ссылку на объект ServletContext в этом классе. Как я могу получить это?

Ответы [ 2 ]

15 голосов
/ 28 апреля 2010

Вам лучше передать его в качестве аргумента в конструктор вашего объекта или установить его с помощью метода установки.

Фактически, вы можете получить атрибут контекста, относящийся к вашему объекту, и передать его только через конструктор / установщик. Например:

YourClass obj = 
    new YourClass((AnotherClass) servletContext.getAttribute("yourAttribute"));

Гораздо хуже и сложнее вариант:

  1. Создать ServletContextListener
  2. зарегистрируйте его в web.xml с помощью <listener><listener-class></listener-class></listener>
  3. on contextInitialized(..) получите ServletContext от события и сохраните его в одноместном поле - где-то статическое поле.

В качестве альтернативы, вы можете делать это при каждом запросе, используя ServletRequestListener и сохранять его в ThreadLocal.

Затем вы можете получить это значение, вызвав ваш синглтон / локальный держатель следующим образом:

ServletContextHolder.getCurrentServletContext()
0 голосов
/ 08 февраля 2016

У меня была эта проблема, но так как я вызвал класс из JSP, я просто передал ссылку «запрос» HttpServletRequest из JSP в класс и сделал вызов в классе:

String appPath = request.getServletContext().getRealPath("");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...