Доступ к HttpContext, HttpServletRequest и HttpServletResponse из любого места в коде - PullRequest
2 голосов
/ 29 ноября 2010

Я хочу получить доступ к текущему HttpServlerRequest + HttpServletResponse + HttpSession + некоторой другой важной информации, такой как пользовательские данные и пользовательские предпочтения, из любой точки моего приложения.В данный момент я создаю специальный объект MyServletContext , который затем передается в качестве первого параметра всем методам всех моих объектов.Я хочу избавиться от этого параметра, но я не уверен, что это лучший способ сделать это.

Одна из моих идей - создать глобальный кеш, где я храню MyServletContext , хэшированныйтекущая тема.Всякий раз, когда мне нужна какая-либо информация, хранящаяся в MyServletContext , я буду называть этот кеш, который найдет мне нужный объект.Я знаю, что мне нужно сделать этот поток кеша безопасным, и я знаю, как это сделать.Вопрос: есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Использование ThreadLocal является типичным способом достижения этой цели, но это действительно не очень хороший вариант.

Передача целого контекста везде также не предпочтительна.

Лучше всегосделать это передать в качестве параметров только те данные, которые необходимы.Таким образом, вы не делаете свой уровень обслуживания зависимым от веб-уровня.И это более тестируемо.

3 голосов
/ 29 ноября 2010

Я использовал для этой цели ThreadLocal.Создайте HttpFilter, который помещает HttpRequest в ThreadLocal, и используйте его везде в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...