URL Rewriter

Mnoho z vás jistě zná modul do apache mod_rewrite, který umožňuje pomocí regulárních výrazů transformovat URL.

Lze tak přepsat URL /index.jsf?typ=cla­nek&id=1 na krásnější /clanky/1/. Lze jej také použít pro přesměrování uživatele z již nepoužívané adresy (např. při restrukturalizaci stránek).

U webové aplikace by měli být URL dlouhodobě stabilní tak, aby odkazy na ně fungovaly i za 10 let. Proto je dobré o nich přemýšlet. Navrhnete si strukturu aplikace a k tomu odpovídající URL. Tato přepisování umožňují oddělit adresy od použité technologie (lze ji tedy později snáze vyměnit).

Bohužel pro použití v Javě existuje velmi málo takovýchto modulů. A když už existují, jsou šířeny pod licencí GPL. Pokud je použijete, musíte pod touto licencí uveřejnit i vaši celou aplikaci (a to konkrétně pod GPL, nelze tak použít ani jiné licence). To bylo pro nás neakceptovatelné. Proto jsme před časem vytvořili vlastní implementaci – URL Rewriter. Teď ji uveřejňujeme pod LGPL licencí. Lze jej bez starostí použít.

Knihovna je implementována jako Servlet Filter. Pomocí souboru /WEB-INF/rewriter-config.xml jej můžete konfigurovat:

<rewriter-config xmlns:b="http://rewriter.softeu.cz/basic/">
    <b:regex>
                <from>^/clanky/(.*)$</from>
                <to>/clanky.jsf?id=$1</to>
    </b:regex>
</rewriter-config>

Program umožňuje také určit, že má být uživatel přesměrován:

    <b:regex type="redirect">

Lze také určit, zda se jedná o trvalé (permanent-redirect) nebo dočasné (temporary-redirect) přesměrování.

Modul lze snadno rozšiřovat o vlastní pravidla (např. dotaz do databáze na název článku).

V současné době podporuje tyto tři pravidla:

  • b:regex – regulární výraz.
  • b:fixed – fixní přesměrování. Není nutné ošetřovat zvláštní znaky jako pro regulární výraz. XML znaky je nutné ošetřovat i nadále.
  • b:facelets – sada příkazů, která zjednodušuje práci s JSF a Facelets.

Tento modul lze také snadno použít pro nahrazení přesměrovávajícího index.jsp při použití JSF/Struts apod. Lze jím také zabránit přímému přístupu na index.xhtml.

Instalace

Pokud používáte Maven, stačí přidat do pom.xml závislost:

<!-- url rewriter -->
<dependency>
    <groupId>cz.softeu</groupId>
    <artifactId>softeu-rewriter</artifactId>
    <version>1.1</version>
    <scope>runtime</scope>
</dependency>

Pokud Maven nepoužíváte, umístěte soubory softeu-rewriter-1.1.jar a xom-1.1.jar do adresáře WEB-INF/lib/.

Dále upravte web.xml:

<!-- url rewriter -->
<filter>
    <filter-name>RewriterFilter</filter-name>
    <filter-class>cz.softeu.rewriter.RewriterFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>RewriterFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

A vytvořte soubor s pravidly WEB-INF/rewriter-config.xml:

<rewriter-config xmlns:b="http://rewriter.softeu.cz/basic/">
    <b:regex>
        <from>^/clanky/(.*)$</from>
        <to>/clanky.jsf?id=$1</to>
    </b:regex>
</rewriter-config>

Přeji mnoho úspěchů při používání.

Aktualizace: tak už je tento balík i v hlavním Maven repository. Není tedy nutné používat repository SoftEU

3 thoughts on “URL Rewriter”

  1. Pekny, jenom dotazek – je nejakej rozdil proti pouziti tohohle, versus pouziti apache httpd „jako predskokana tomcata“ a v nem pouzit mod_rewrite? Nebo je to mysleno jako mod_rewrite pro prostredi bez apache httpd?

  2. V prostředí, kde je apache v podstatě nemá. Ale po instalaci se musí doplnit sada pravidel. Což je nepříjemné při vývoji – každá instalace má kroky navíc.

    Toto řešení začne být zajímavé, pokud potřebuješ např. provádět dotaz do databáze na název článku (tak je třeba implementován tento blog).

Napsat komentář: Jindra Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *