Servlet фильтр и ServletRequestListener

Я хочу привязать JPA EntityManager к текущему потоку по каждому запросу (через ThreadLocal), что можно сделать с помощью ServletRequestListener или фильтра. Слушатель выглядит чище, и в этом случае мне не нужны дополнительные возможности фильтра. Но, возможно, у фильтра есть преимущество, которое я упустил.

должен ли я использовать фильтр сервлетов или ServletRequestListener для этого?

1 ответов


для вашей цели нет большой разницы. Но слушатель "чище" в том смысле, что кто-то, читающий ваш код, сразу поймет, что цель этого кода не может быть перехватом запроса или его изменением или делать другие вещи, которые может сделать фильтр.

Spring, например, использует ServletRequestListener, чтобы позволить весенним веб-приложениям, которые не используют собственную веб-структуру Spring MVC, тем не менее получить доступ к веб-функциям, таким как сессии областью фасоли. См.этот документ.

Edit: чтобы быть более ясным, я упоминаю Requestcontextlistener Spring, потому что он делает ровно о чем вы говорите: создайте объект ThreadLocal для хранения данных, к которым можно получить доступ на протяжении всего жизненного цикла запроса.