суббота, 6 ноября 2010 г.

Servlet Session & Filters

Сессии
Контейнер сервлетов конечно же реализует механиз 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 трассформирует его в нужный вид.

Комментариев нет:

Отправить комментарий