URL-адреса маски в JSP - PullRequest
       32

URL-адреса маски в JSP

3 голосов
/ 11 декабря 2008

Относящиеся к этому вопросу: Замена символов URL в JSP с UrlRewrite

Я хочу замаскированные URL-адреса в этом веб-проекте JSP Java EE. Например, если у меня было это:

http://mysite.com/products.jsp?id=42&name=Programming_Book

Я хотел бы превратить этот URL в нечто более дружественное к пользователю / Google, например:

http://mysite.com/product-Programming-Book

Я боролся с UrlRewrite, forwarding и RequestDispatcher, чтобы выполнить то, что я хочу, но я немного растерялся. Я, вероятно, должен иметь фильтр для всех запросов http, переформатировать их и переслать страницу.

Может кто-нибудь дать несколько указаний? Подсказки?

Большое спасибо.

ОБНОВЛЕНИЕ: Сервлеты сделали это. Спасибо Юваль за твою ориентацию. Я использовал UrlRewrite, как вы можете видеть в первом предложении вопроса, я также задавал вопрос об этом. Но мне не удалось заставить работать UrlRewrite так, как я хотел. Сервлеты сделали свою работу.

Ответы [ 4 ]

2 голосов
/ 15 декабря 2008

Вы можете использовать URLRewrite filter. Это как mod_rewrite для веб-сервера Apache HTTP.

http://tuckey.org/urlrewrite/

"Перенаправить один URL

<rule>
<from>^/some/old/page\.html$</from>
<to type="redirect">/very/new/page.html</to>
</rule>

Tiny / Freindly url

<rule>
<from>^/zebra$</from>
<to type="redirect">/big/ugly/url/1,23,56,23132.html</to>
</rule>

"

0 голосов
/ 29 мая 2010

С одной стороны, я бы порекомендовал вам разобраться с этим в вашем приложении, а не полагаться на внешние переписывания, скажем, через Apache mod_rewrite (если вы не определили, что это самый быстрый способ сделать это.)

Но сначала несколько вещей:

Я бы не конвертировал это:

http://mysite.com/products.jsp?id=42&name=Programming_Book

В это:

http://mysite.com/product-Programming-Book

Видите ли, если я беру только пример вашей книги, я не вижу, что не так с прежним URL. После все это работает на Амазоне. И нет такой вещи, как дружественные к Google URL-адреса (только удобные для пользователя.) Вы должны подумать, почему вы хотите сделать этот тип переписывания и как. Например, в вашем варианте перезаписи, где находится идентификатор?

То есть вы должны определить логическое правило, определяющее

уникальные страницы, которые вы хотите показать, и уникальная комбинация параметров, которая может идентифицировать каждую страницу.

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

  1. по ISBN
  2. по имени автора, названию и если применимая версия (если версия отсутствует, предположим самое последнее)
  3. если ISBN включен с автором Имя, название и / или издание, игнорировать все кроме ISBN. То есть лечить это как первый (или, точнее, игнорировать все другие идентификации книг параметры при наличии ISBN.)

При использовании параметризованной схемы url у вас будут следующие возможности:

http://yoursite/products?isbn=123465
http://yoursite/products?author=johndoe&title="the cookbook" << this assumes the latest edition, or 1 if first.
http://yoursite/products?author=johndoe&title="the cookbook"&edition=3
http://yoursite/products?title="the cookbook"&author=johndoe
http://yoursite/products?edition=3&title="the cookbook"&author=johndoe
....

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

Таким образом, вы получите следующее (используя тот же пример, что и Джон Доу, автор, с его книгой в третьем издании):

http://yoursite/product/isbn/12345
http://yoursite/product/author/johndoe/the%20cookbook << see the %20 for encoding spaces (not a good idea, but something to take into account)
http://yoursite/product/author/johndoe/the%20cookbook/3

Любая другая комбинация должна либо генерировать ошибку, либо хитро придумывать, как переписать в «пушечные» версии и отправить клиенту HTTP 3xx с соответствующим целевым URL-адресом.

Как только вы прояснили эти детали, вы можете спросить себя, стоит ли это усилий или нужно.

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

Вы не хотите переписывать URL-адреса, потому что они возникают в HTTP 303/307 назад и вперед между вашим сервером и вашим клиентом. Или, по крайней мере, вы хотите свести это к минимуму.

0 голосов
/ 11 декабря 2008

Как правило, вы выходите из приложения с помощью Apache. Если так, посмотрите на использование Apache mod_rewrite. http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

0 голосов
/ 11 декабря 2008

Прошло много времени с тех пор, как я перебирался с JSP, но если память служит, вы можете добавить шаблоны URL в ваш web.xml (или один из этих файлов конфигурации XML) и заставить механизм сервлета автоматически направить запрос на действительный URL с вашим выбором параметров. Я могу посмотреть детали, если хотите.

В вашем случае сопоставьте http://mysite.com/product-Programming-Book с URL http://mysite.com/products.jsp?id=42&name=Programming_Book и пользователь больше не видит настоящий URL. Кроме того, вы можете использовать этот более удобный для пользователя URL в вашем приложении в качестве логического имени для этой страницы.

Ювал = 8 -)

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