Контейнер сервлетов конечно же реализует механиз http-сессий.
Для того, чтобы создать сессию нужно выполнить:
HttpSession session = request.getSession(true);
Для того, чтобы обратиться к существующей сессии нужно:
HttpSession session = request.getSession();
Время жизни сессии определяется в дескрипторе развертывания:
<session-config> <session-timeout> 30 </session-timeout> </session-config>
В сессии мы можем создавать переменные и хранить в них значения.
Иногда нам нужено разделять переменную между разными сервлетами, при этом эта переменная касается не отдельной сессии, а вообще работы приложения. Тут на помощь приходит обьект контекста контейнера сервлетов:
ServletContext sc = this.getServletContext();
В него как и в обьект сессии можно создавать и удалять переменные.
Фильтры
Очень полезны в механизме сервлетов фильтры, которые пропускают через себя запросы, идущие к сервлетам.
Эти фильтры мапятся либо к конкретному сервлету, либо к патерну урла. Они могут выстариваться в цепочки, выполняя каждый свою специфическую функцию.
Для того чтобы создать свой фильтр, мы должны реализовать интерфейс javax.servlet.Filter.
Чтобы фильтр был виден контейнеру, мы должны его описать в контейнере сервлетов, примапить его к сервлету(ам) или(и) патерну(ам) урлов.
При этом мы можем задать некие конфигурационные параметры этому фильтру в тегах дескриптора.
В нашей классе фильтра мы должны релизировать метод инит, он получает конфигурационные параметры, которые мы определяем в дескрипторе. Основываясь на них мы можем коректировать работу наших фильтров.
Также необходимо реализовать метод дуФильтер , он получает реквест, респонс, и цепочку. Цепочка содержит все фильтры которые подошли данному урлу или сервлету, в том порядке, который был указан в дескрипторе.
Первого фильтра в цепочеке вызывается метод дуФильтер, он выполнив свои задумки должен вызвать метод дуФильтер цепочки, который вызовет метод дуФильтр следующего фильтра. Если следующего фильтра нет в цепочку, то запрос будет передан сервлету.
Хоть фильтры вызываются и перед работой самого сервлета, они могут коректировать, как запрос так и ответ. Ведь мы можем вызвать дуФильтр цепочки в нашем методе дуФильтр, а корективы выполнять не до этого вызова, а после. Таким образом за вызовом дуФильр обьекта цепочка, мы получим обработанный респонс последующими фильтрами и сервлетом. Теперь же мы можем подкоректировать ответ сервлета.
Фильтры мы можем использовать для:
1) Аутентификации, проверять авторизировался ли пользователь и позволено ли ему с его ролью получать доступ к запрошенному ресурсу.
2) Коректировать заголовки реквеста.
3) Коректировать, сжимать респонс.
4) Основываясь на заголовках, понимать в каком виде клиенту нужно отправлять ответ. Так Сервлет дает ответ в элеметарном хмле, а фильтр с помощью xslt трассформирует его в нужный вид.
Комментариев нет:
Отправить комментарий