В PHP всегда можно получить доступ к текущему запросу или ответу из любой части своего кода. Эта концепция является фундаментальной для программирования PHP. Всегда есть данные запроса, данные ответа, данные сеанса (и т. Д.) !
Этого не происходит в сервлетах Java! Чтобы иметь доступ к HttpServletRequest, HttpServletResponse, HttpSession (и т. Д.) В вашем коде, вам нужно передать их как переменные функции. Это означает, что вы не можете кодировать веб-фреймворк, который по своей природе «знает» обо всех этих проблемах и устраняет сложность их передачи.
Итак, я разработал это решение:
- Создать и зарегистрировать ServletRequestListener.
- При событии requestInitialized связать текущий запрос HttpServletRequest с контекстом JNI, указав имя текущего потока (Thread.currentThread (). GetName ());
- После события requestDestroyed отсоедините вышеуказанный ресурс JNI для очистки.
Таким образом, каждый получает доступ к текущему запросу / ответу из из любого места своего кода , поскольку они всегда присутствуют в контексте JNI и могут быть получены путем предоставления имени текущего потока.
Все известные контейнеры сервлетов реализуют однопоточную модель для каждого запроса , поэтому невозможно смешивать запросы (конечно, не следует забывать их очищать).
Кроме того, ресурсы JNI каждого веб-приложения по умолчанию разделены , поэтому нет проблем их смешивания или проблем безопасности, которые могут возникнуть из-за доступа одного веб-приложения к просьбы других.
Какая-то скрученная, но приятная и простая ...
Что вы думаете?