Могу ли я перехватить и изменить URL-адрес запроса HTTPServletRequest в фильтре сервлетов Java? - PullRequest
1 голос
/ 29 августа 2009

У меня есть веб-приложение на Java, которое управляет данными для многих клубов. Мне бы хотелось, чтобы приложение отображало информацию о клубе в зависимости от набранного URL.

Например. Если вы введете "localhost: 8080 / MyApp / Club1" ... тогда приложение должно вычеркнуть конец URL-адреса запроса (Club1), выполнить поиск в базе данных клуба и добавить его в сеанс. Затем все запросы к базе данных могут искать данные в зависимости от того, какой клуб находится в сессии.

Если вы введете "localhost: 8080 / MyApp / Club2", вы получите клуб для регистрации в сеансе, и все запросы к базе данных относятся к клубу 2.

Я подумал, что могу сделать это, используя фильтр сервлетов, который вызывает HTTPServletRequest (). GetRequestURL () и удаляет название клуба из URL-адреса запроса, чтобы найти клуб из базы данных.

Но тогда я не хочу менять URL-адрес запроса на http://localhost:8080/MyApp, чтобы приложение работало как обычно. Тем не менее, я не думаю, что я могу это сделать?

Кто-нибудь есть идеи, как это сделать, или если есть лучший подход?

Ответы [ 4 ]

2 голосов
/ 29 августа 2009

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

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

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

Это один из тех случаев, когда, если слишком сложно и запутанно делать то, что вы хотите, вы, вероятно, пытаетесь поступить неправильно. Есть более простые способы сделать это, и фильтры даже не закрываются.

1 голос
/ 29 августа 2009

Взгляните на urlrewritefilter . Это фильтр сервлетов, который может изменить URL запроса до того, как ваш сервлет его увидит. Он часто используется для преобразования параметров запроса в параметры пути или из них.

Если вы заглянете в Google, вы увидите, что он обнаружен в стековых трассировках некоторых довольно громких java-приложений:)

0 голосов
/ 29 августа 2009

В do_GET / do_POST вашего сервлета вы можете интерпретировать первую часть URI как клуб, добавить его в сеанс (используя область приложения), если он еще не существует, а затем делегировать другой код, который только просматривает оставшуюся часть URI и, при необходимости, использует сессионный клуб.

0 голосов
/ 29 августа 2009

Шаблоны Core J2EE - Фильтр перехвата

РЕЗЮМЕ: Создание сменных фильтров для обрабатывать общие службы в стандарте образом, не требуя изменений в основной код обработки запросов. фильтры перехватывают входящие запросы и исходящие ответы, позволяющие предварительная обработка и постобработка. Мы могут добавлять и удалять эти фильтры ненавязчиво, без требует изменений в нашем существующем Код.

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