С одной стороны, я бы порекомендовал вам разобраться с этим в вашем приложении, а не полагаться на внешние переписывания, скажем, через Apache mod_rewrite (если вы не определили, что это самый быстрый способ сделать это.)
Но сначала несколько вещей:
Я бы не конвертировал это:
http://mysite.com/products.jsp?id=42&name=Programming_Book
В это:
http://mysite.com/product-Programming-Book
Видите ли, если я беру только пример вашей книги, я не вижу, что не так с прежним URL. После все это работает на Амазоне. И нет такой вещи, как дружественные к Google URL-адреса (только удобные для пользователя.) Вы должны подумать, почему вы хотите сделать этот тип переписывания и как. Например, в вашем варианте перезаписи, где находится идентификатор?
То есть вы должны определить логическое правило, определяющее
уникальные страницы, которые вы хотите показать, и
уникальная комбинация параметров, которая может идентифицировать каждую страницу.
Например, используя книжный шкаф. Допустим, вы можете идентифицировать любую книгу, используя следующие правила:
- по ISBN
- по имени автора, названию и если
применимая версия (если версия
отсутствует, предположим самое последнее)
- если 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 назад и вперед между вашим сервером и вашим клиентом. Или, по крайней мере, вы хотите свести это к минимуму.